`

关于项目中后台中文解码的解决方案

 
阅读更多

项目中经常用到前台传中文参数的问题,传中文很容易乱码,如果是form表单post提交,就不用考虑这些问题,但是有些情况不适宜使用form表单,一般都是js中将中文进行编码,但是在后台如何解码,这就存在一些差异性了。前台肯定需要将中文encodeURIComponent,但后台如何解码呢?

分析情况,有如下几种转码:

1、

 

public staticString getRealString(String input) throws UnsupportedEncodingException{
      input = new String(input.getBytes("iso8859-1"),input);
      return input;
   }



2、

 

public staticString getRealString1(String input) throwsUnsupportedEncodingException{
      input = java.net.URLDecoder.decode(input, "UTF-8");
      return input;
   }



以上两种解码方式,根据线上环境不同,从而可能能正常解码,可能解析完仍然乱码,这就跟线上服务器环境有关系啦,如果服务器进行一次转码,以上方式再进行转码,肯定仍然是乱的,还有记得在大于号项目中,如果是异步跨域的请求,后台必须用第二种方式解码。总之要依赖服务器环境,有没有特定的解码方案呢,答案是,有的。

3、

 

public staticString decodeURIComponent(String encodedURI) {
 
      char actualChar;
 
      StringBuffer buffer = new StringBuffer();
 
      int bytePattern, sumb = 0;
 
      for (int i =0, more = -1; i < encodedURI.length(); i++) {
 
          actualChar = encodedURI.charAt(i);
 
          switch (actualChar) {
 
          case'%': {
 
             actualChar = encodedURI.charAt(++i);
 
             int hb = (Character.isDigit(actualChar)? actualChar -'0'
 
             : 10 + Character.toLowerCase(actualChar) - 'a')& 0xF;
 
             actualChar = encodedURI.charAt(++i);
 
             int lb = (Character.isDigit(actualChar)? actualChar -'0'
 
             : 10 + Character.toLowerCase(actualChar) - 'a')& 0xF;
 
             bytePattern = (hb << 4) | lb;
 
             break;
 
          }
 
          case'+': {
 
             bytePattern = ' ';
 
             break;
 
          }
 
          default: {
 
             bytePattern = actualChar;
 
          }
 
          }
 
          if ((bytePattern & 0xc0) == 0x80) {//10xxxxxx
 
             sumb = (sumb << 6) | (bytePattern & 0x3f);
 
             if (--more == 0)
 
                 buffer.append((char) sumb);
 
          } else if((bytePattern & 0x80) == 0x00) { // 0xxxxxxx
 
             buffer.append((char) bytePattern);
 
          } else if((bytePattern & 0xe0) == 0xc0) { // 110xxxxx
 
             sumb = bytePattern & 0x1f;
 
             more = 1;
 
          } else if((bytePattern & 0xf0) == 0xe0) { // 1110xxxx
 
             sumb = bytePattern & 0x0f;
 
             more = 2;
 
          } else if((bytePattern & 0xf8) == 0xf0) { // 11110xxx
 
             sumb = bytePattern & 0x07;
 
             more = 3;
 
          } else if((bytePattern & 0xfc) == 0xf8) { // 111110xx
 
             sumb = bytePattern & 0x03;
 
             more = 4;
 
          } else {// 1111110x
 
             sumb = bytePattern & 0x01;
 
             more = 5;
 
          }
 
      }
 
      return buffer.toString();
 
   }



此种解码方式,不依赖于服务器环境,至少在编年史项目中,我最后采用这种方式解码,完全没有问题,大家也可以在项目中试试。

分享到:
评论

相关推荐

    页面中文和后台服务器端接收中文乱码问题完全解决

    针对上述情况,本解决方案主要围绕两个方面展开:客户端的编码处理与服务器端的解码处理。 #### 解决方案 为确保中文字符在客户端和服务端之间的正确传输,采取以下步骤: ##### 客户端处理 1. **两次`...

    智慧平安城市系统解决方案.ppt

    智慧平安城市系统解决方案是针对现代社会公共安全需求而提出的综合性管理体系,旨在通过先进的信息技术提升城市的安全水平和执法效率。这一方案的构建主要围绕以下几个核心知识点: 1. 市场规模与政策背景:截至...

    java的mp3解码器(非JMF、控制台播放音乐)

    总的来说,这个Java MP3解码器提供了一种轻量级、独立的解决方案,允许开发者在各种Java应用中轻松实现MP3音乐播放功能,无需依赖大型框架。其源代码和编译过程对开发者来说是一次学习和实践音频处理的好机会。

    【推荐】2019年ITC智慧(平安)城市音视频整体解决方案

    2019年的ITC智慧(平安)城市音视频解决方案是这一领域的精品之作,其核心在于构建一个全面、高效、智能的音视频系统,以应对城市安全管理中的各种挑战。 平安城市项目在中国的市场规模不断增长,政策支持持续增强...

    pc调用摄像头拍照工具类及后台接受处理.zip

    这个"pc调用摄像头拍照工具类及后台接受处理.zip"压缩包提供了一种解决方案,它兼容谷歌Chrome、Internet Explorer(IE)和Firefox等主流浏览器。下面将详细解释这一功能的实现及其涉及到的关键知识点。 首先,前端...

    P2P后台终结者源码

    通过深入研究这个源码,开发者可以提升自己在P2P网络编程、系统管理、多线程并发处理等多个方面的技能,同时也能了解到实际项目中的一些最佳实践和常见问题解决方案。对于想要深入了解这些领域的学习者来说,这是一...

    android应用源码跨平台的音视频解决方案.zip

    本资源“android应用源码跨平台的音视频解决方案.zip”提供了一个跨平台的解决方案,旨在帮助开发者在Android平台上实现高效、稳定且兼容性强的音视频功能。以下是对这个解决方案可能涉及的知识点的详细解析: 1. *...

    大华视频C#后台开发demo

    首先,我们要理解“大华视频”通常指的是大华公司提供的视频监控解决方案,这可能包括视频编码、解码、存储、传输和分析等功能。在这个C#后台开发demo中,开发者可能已经集成了一些大华特有的API或SDK,用于与大华的...

    局域网环境快速搭建课程点播+直播系统解决方案

    局域网环境下的课程点播和直播系统搭建是一项技术性较强的工程,通常涉及到多个关键组件和技术。...通过自定义和本地化开源项目,可以构建一个满足特定需求的、稳定的局域网内课程点播和直播解决方案。

    android asynTask 异步后台线程 各种操作

    在Android开发中,异步处理是非常...然而,对于长时间或复杂的任务,可能需要考虑使用更强大的解决方案,如`IntentService`、`HandlerThread`或`LiveData`等。在实际开发中,应根据项目需求选择最适合的异步处理方式。

    专题资料(2021-2022年)20180623区县级智慧城市雪亮工程项目解决方案DOC158页.docx

    ### 重要知识点解析 ...综上所述,《专题资料(2021-2022年)20180623区县级智慧城市雪亮工程项目解决方案DOC158页》文档涵盖了雪亮工程项目从前期设计到后期实施的各个环节,为读者提供了全面而深入的理解。

    swift-BBWebImage是Swift图片组件用于图片下载缓存编解码编辑与展示

    综上所述,Swift-BBWebImage是一个全面的图片处理解决方案,为iOS开发者提供了高效、灵活的图片管理工具,极大地提升了图片相关功能的开发效率和用户体验。通过理解和运用BBWebImage,开发者可以轻松构建出功能丰富...

    Android开源项目源代码

    这些开源项目不仅为开发者提供了现成的解决方案,还展示了最佳实践和设计模式。例如,使用单例模式管理图片加载,通过接口实现组件解耦,以及如何利用Android的AsyncTask进行后台任务处理。此外,它们也强调了性能...

    java认证_Ajax中文乱码问题及解决方法.doc

    虽然这个问题主要涉及Ajax的中文乱码解决方案,但提到了C++与Java的对比。C++和Java的设计理念有所不同,C++强调兼容性与性能,而Java则追求简单性和跨平台性。C++的复杂性源自其对C语言的兼容性,这使得C++具备了...

    异步GIF图像解码器和图像查看器支持播放GIF图像 它只是使用更少的内存.zip

    本项目是一个开源解决方案,名为"YLGIFImage",它提供了一种高效、内存友好的异步GIF解码方法。异步解码意味着该库会在后台线程中进行GIF图像的解码工作,不会阻塞主线程,从而提高了用户体验,特别是对于那些需要...

    前端项目-aurora.js.zip

    Aurora.js是基于JavaScript开发的开源音频解码库,主要目标是提供一个轻量级、高效的前端音频处理解决方案。这个项目的核心功能是将常见的音频格式(如MP3、AAC等)在客户端进行解码,避免了依赖Flash插件或服务器端...

    Android录制编辑播放视频解决方案。

    本解决方案着重于使用NDK(Native Development Kit)并结合开源框架,提供了一套完整的功能,包括视频录制、视频编辑(添加特效)以及视频渲染和播放。下面将详细阐述这些关键知识点。 1. **Android视频录制**: -...

    智慧平安城市系统解决方案.pptx

    智慧平安城市系统解决方案是针对现代城市安全需求而设计的一套综合管理系统,旨在通过先进的信息技术提升城市的公共安全和执法效率。该方案主要关注以下几个核心方面: 1. 市场规模与政策背景:截至2012年底,中国...

    JiaoZiVideoPlayer-视频播放.zip_android_android硬解码_driverhit_jiaoziVi

    本文将深入探讨一个专为Android设计的视频播放框架——JiaoZiVideoPlayer,它集成了缓存、硬解码以及列表视频播放等重要功能,旨在为开发者提供一套完整的解决方案。 **一、JiaoZiVideoPlayer概述** ...

    ios 后台数据解析

    在iOS开发中,后台数据解析是一项关键技能,它涉及到如何将服务器返回的JSON或XML格式的数据转换为可操作的对象。本教程将详细讲解四种主要的数据解析方法:纯代码解析、第三方库解析、Swift Codable协议以及使用...

Global site tag (gtag.js) - Google Analytics