`
lijunjie
  • 浏览: 391773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

中文字符乱码正常显示调试代码

阅读更多
字符乱码时,通过几种字符来查看使用那种字符可以显示正常字符.
可以测试通过那种编码可以使字符显示成正常的中文字符.

	public static void testCode(String text)
	{
		String[] srcCode={"gbk","gb2312","utf-8","iso8859-1","latin1"};
		String text1;
		try
		{   
		for(int i=0;i<srcCode.length;i++)
		{
			text1=new String(text.getBytes(),srcCode[i]);
			logger.info(srcCode[i]+":"+text1);
		}
		
		for(int i=0;i<srcCode.length;i++)
		{
			for(int j=0;j<srcCode.length;j++)
			{
				text1=new String(text.getBytes(srcCode[i]),srcCode[j]);
				logger.info(srcCode[i]+","+srcCode[j]+":"+text1);
			}
		}
		
		text1=java.net.URLDecoder.decode(text);
		logger.info(text1);
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
1
0
分享到:
评论
11 楼 lijunjie 2009-03-20  
moshalanye 写道

&nbsp;&nbsp;&nbsp; 引用(不包括你说的那个解码的时候已经错误了的情况) &nbsp; &nbsp;&nbsp;&nbsp; 你还没有理解重要的地方,我把最重要的地方再说一次,希望你能明白。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 字节流是一种纯介质形式,它只有数值,如果把这些数值按照一定的编码字符集的规则解码就得道我们定义的文字。(换句话说就是某些数字对应着某些文字的规则)&nbsp;&nbsp;&nbsp; java 中 String 是java的类,它的对象是java的表现形式,而java的表现形式是使用得java内码。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 如果字节流放在jvm中是不会发生任何变化的,它不属于任何语言,是纯粹的介质,但一旦用字节流构造 String 对象,就把字节流 解序列化 为java 对象,而这个过程是先解码,再转码!&nbsp;&nbsp;&nbsp; 你的参数已经是String的对象了,那么要不解码正确,表现得是正确的文字&nbsp;&nbsp;&nbsp; 要不解码错误,表现的可能是乱码或则错误的文字希望你能理解。少走弯路。

我明白你的意思,比如a为服务器,b为客户端,a发送编码为gbk的数据流到b,如果b在读数据流是使用iso8859-1来读取,那么这样肯定会乱码,如果他也用的gbk来读取。那么就是正确的。是这样的吧。在这之后,如果将这个数据流转成字符串的时候,如果他用gbk,那么肯定也能正确读取中文,但是如果这个时候用了用iso8859-1的时候,那么应该中文是乱码是这样吧。我这个只是处理后面这部分,因为我用了getbytes("charset").来取数据字节数组了,当然如果这个这个中间的每一步的编码我都知道,那么就不用这个方法,直接可以知道用那个编码处理不会乱码,但是很多乱码的情况是我们并不知道这些,或者我们可能不理解这些。所以用这个来循环找到可以把他识别成中文的字符集。以上是我的理解,不知道还有什么问题清指教。
10 楼 moshalanye 2009-03-19  
   
引用
(不包括你说的那个解码的时候已经错误了的情况)

 
    你还没有理解重要的地方,我把最重要的地方再说一次,希望你能明白。
   

    字节流是一种纯介质形式,它只有数值,如果把这些数值按照一定的编码字符集的规则解码就得道我们定义的文字。(换句话说就是某些数字对应着某些文字的规则)



    java 中 String 是java的类,它的对象是java的表现形式,而java的表现形式是使用得java内码。
   

    如果字节流放在jvm中是不会发生任何变化的,它不属于任何语言,是纯粹的介质,但一旦用字节流构造 String 对象,就把字节流 解序列化 为java 对象,而这个过程是先解码,再转码!

    你的参数已经是String的对象了,那么要不解码正确,表现得是正确的文字
    要不解码错误,表现的可能是乱码或则错误的文字

希望你能理解。少走弯路。
9 楼 lijunjie 2009-03-16  
moshalanye 写道

web 传产数有些重要的细节,一个是浏览器默认将流(页面的编码方式是contentType)进行is-8859-1的转码,得到新的字节流,这个过程能缩小流的大小,类似减少传输量和简单加密的效果,这个时候在request设置字符编码方式,那么web容器会首先将编码(iso-8859-1逆运算)转回原来的字节流(这个过程是可逆的)!再对流作正确的解码工作!这样才得道正确的字符串。还是那句话,如果解码发生错误再进行java内码的转码,会导致流被破坏!被破坏的东西是不能再恢复了的!

恩。你说的是本质方面,而且就解码发生错误的情况时,你说的对,这个处理不了。我这个只是为了在一定条件下(不包括你说的那个解码的时候已经错误了的情况)方便快捷的找到能够让乱码变成中文的字符集。他的目的很简单。对于字符集理解不那么深入的情况下。可以很容易从各个转化中找到正确的字符集。
8 楼 moshalanye 2009-03-16  
web 传产数有些重要的细节,一个是浏览器默认将流(页面的编码方式是contentType)进行is-8859-1的转码,得到新的字节流,这个过程能缩小流的大小,类似减少传输量和简单加密的效果,这个时候在request设置字符编码方式,那么web容器会首先将编码(iso-8859-1逆运算)转回原来的字节流(这个过程是可逆的)!再对流作正确的解码工作!这样才得道正确的字符串。
还是那句话,如果解码发生错误再进行java内码的转码,会导致流被破坏!被破坏的东西是不能再恢复了的!
7 楼 lijunjie 2009-03-14  
moshalanye 写道

&nbsp;&nbsp; 你没理解我的意思。我说的你不知道原来的编码方式,转不回去是这个原因。1。中文,汉字 “你” 假如&nbsp; 是GBK 编码&nbsp; 的字节流是 XX2。进入jvm时,我首先读到字节流 XX,并且知道了它的编码方式是GBK,那么我才知道是 “你” 这个字,得知这个字是因为GBK表(这个过程是解码而不是转码)3。知道是你后,把GBK的流转成了unicode也就是java内码(这个地方就是转码了)这个时候jvm中就是正确的 “你”的 unicode如果在这个过程中 2 解码过程出现 字节流流 和 编码不匹配情况,则出现解码错误,解到的已经物是人非过程3基于2的 错误的解码(得到该字符集编码表中对应莫名其表的东西,有可能编码表中没有,就成了完全的乱码) 再进行转码,得到的更是莫名奇妙的 unicode编码字节流(完全的乱码是没得转的)而&nbsp; new String(byte[],"GBK")&nbsp; 首先是解码,在就是转成内码“你”.getBytes("GBK") 就是获得从unicode 编码 转成GBK编码的字节流如果进入jvm 解码时就出了问题,你认为知道知道它原来的编码方式 就可以得到原来的字节流吗(只要有完全的乱码就不可能,还原可能的几率非常小,只要有乱码就可能导致流发生改变)?

从这里看的出来,这方面你比我理解的深刻。我没有理解那么深。我用这个方法一般都是在使用web页面传递参数的时候。可能因为服务器本身的字符集,或者数据库的字符集问题。使得页面从上一个页面获得的参数或者从数据库中取得的参数乱码。那么我怎么使得他可以变成正常的字符呢。该使用那个字符集呢。就可以使用这个方法将他找出来。
6 楼 moshalanye 2009-03-13  
  对了! 忘了补充给你的方法,文件按照流存的,读文件的时候就是读流,不知道流的编码方式,解码时就会出乱码,所以麻。你因该用文件的流做为入参。用testCode(String text)
这个text 已经是jvm的内码了  还能做为你的入参吗?
至少你也该用 estCode(byte bytes[])  所以说你在误导别人  会把别人越搞越糊涂
5 楼 moshalanye 2009-03-13  
   你没理解我的意思。我说的你不知道原来的编码方式,转不回去是这个原因。

1。中文,汉字 “你” 假如  是GBK 编码  的字节流是 XX
2。进入jvm时,我首先读到字节流 XX,并且知道了它的编码方式是GBK,那么我才知道是 “你” 这个字,得知这个字是因为GBK表(这个过程是解码而不是转码)
3。知道是你后,把GBK的流转成了unicode也就是java内码(这个地方就是转码了)

这个时候jvm中就是正确的 “你”的 unicode


如果在这个过程中 2 解码过程出现 字节流流 和 编码不匹配情况,则出现解码错误,

解到的已经物是人非

过程3基于2的 错误的解码(得到该字符集编码表中对应莫名其表的东西,有可能编码表中没有,就成了完全的乱码) 再进行转码,得到的更是莫名奇妙的 unicode编码字节流(完全的乱码是没得转的)

而  new String(byte[],"GBK")  首先是解码,在就是转成内码

“你”.getBytes("GBK") 就是获得从unicode 编码 转成GBK编码的字节流

如果进入jvm 解码时就出了问题,你认为知道知道它原来的编码方式 就可以得到原来的字节流吗(只要有完全的乱码就不可能,还原可能的几率非常小,只要有乱码就可能导致流发生改变)?


4 楼 lijunjie 2009-03-09  
spiritfrog 写道

你这个程序怎样检查的了?我输一句中文, gbk和gb2312都能正常输出来另外utf8-utf8也是正常的


这个只能使用你的中文乱码.但是不知道如果用那个编码能显示正常的情况下做的测试.比如,你的程序要插入linux下的mysql数据库.你因为某些原因不能改变数据库的编码.而你插入中文和读取中文的时候又出现乱码时.
3 楼 lijunjie 2009-03-09  
moshalanye 写道

呵呵&nbsp; lz 你误人子弟阿!&nbsp; text 做为入参&nbsp; 已经是 jvm 内码的表现形式了,被转过码了而你现在根本不能还原 原来的字节流了&nbsp;&nbsp; 因为你不知道原来的编码



就是因为不知道原来的编码才做这样测试啊.但是编码可能的几种,gbk,gb2312,utf-8.Latin1.我用他们来试验.看那个是正确的.这个才是我的目的.
你有更好的办法吗?还望指教!

2 楼 moshalanye 2009-03-06  
呵呵  lz 你误人子弟阿!  text 做为入参  已经是 jvm 内码的表现形式了,被转过码了
而你现在根本不能还原 原来的字节流了   因为你不知道原来的编码
1 楼 spiritfrog 2009-03-06  
你这个程序怎样检查的了?我输一句中文, gbk和gb2312都能正常输出来
另外utf8-utf8也是正常的

相关推荐

    能显示汉字的串口SSCOM32调试助手.rar

    总的来说,这个工具为STM32开发者提供了一种有效的方法来调试和测试涉及汉字的串口通信,简化了嵌入式系统中汉字显示的复杂性,提高了开发效率。通过深入理解和运用SSCOM32,开发者可以更好地应对中文字符在嵌入式...

    解决fastreport中文显示不全和导出乱码

    如果报表模板或数据源的编码与FastReport内部设定的编码不一致,就可能出现部分中文字符无法正常显示的情况。为了解决这个问题,我们需要检查FastReport的编码设置,确保其与数据源一致。在FastReport的代码中,可能...

    解决Flex 中文乱码

    在开发Flex应用程序时,我们经常会遇到中文乱码的问题,这主要源于AS3(ActionScript 3...对于`解决Flex中文乱码.txt`这个文件,它可能包含了具体的代码示例或更详细的解决步骤,你可以参考其中的内容来解决你的问题。

    ADB中文乱码分析解决

    如果中文显示正常,则说明乱码问题已解决。 #### 三、进阶技巧 - **脚本自动化**:可以通过编写批处理脚本来自动化执行ADB命令,同时确保字符编码设置正确。 - **环境变量配置**:也可以通过修改系统的环境变量来...

    WebSevice 中文乱码

    例如,如果客户端以UTF-8编码发送请求,而服务器端则以GBK或GB2312进行解码,这就会导致中文字符无法正确显示,从而出现乱码现象。 #### 2. SOAP消息头设置错误 在WebService中,SOAP协议被广泛用于传输数据。如果...

    VS调试解决中文乱码

    这种情况通常发生在代码中的中文字符在其他应用程序(如Microsoft Word)中显示不正常,导致信息读取困难。"VS调试解决中文乱码"这个主题就专门针对这一问题,提供了有效的解决方案。 首先,我们要理解为什么会出现...

    x64dbg_2021_01_12(Modified By 风吹小裤衩(20210329)).rar

    在早期的x64dbg版本中,中文字符可能会出现乱码问题,这在处理包含中文字符串的程序时造成很大不便。通过支持UTF-8编码,x64dbg能够正确显示和处理中文字符,大大提升了中国开发者和安全研究人员的用户体验。 其次...

    解决sql anywhere 11 汉字乱码问题

    在开发基于C++ Builder的应用程序并使用SQL Anywhere 11作为数据库时,有时会遇到一个常见的问题:汉字显示为乱码。这个问题通常是由于字符编码设置不正确导致的,这可能影响到数据的正常存储和读取。下面我们将深入...

    JFreechart 在linux下不显示及中文乱码问题

    标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...

    二维码生成工具QRCode源代码支持中文(解决解码时中文乱码)

    QRCode源代码的提供,意味着开发者可以自行构建和定制二维码生成和解码功能,特别是在处理中文字符时避免乱码问题,这是该资源的核心价值所在。 ThoughtWorks是一家知名的全球软件咨询公司,其提供的QRCode库可能是...

    JsonCpp解析\u中文乱码_修改源码_完美解决

    4. **测试和调试**:修改源码后,编写测试用例来验证中文字符的解析和序列化功能是否正常。这可能包括创建包含中文字符的JSON字符串,然后用修改后的JsonCpp库进行解析,再反序列化,看是否能正确恢复原始字符串。 ...

    字符乱码解法方案

    ### 字符乱码解法方案 #### 背景与问题概述 在IT项目开发过程中,经常遇到的一个问题是字符编码不一致导致的乱码问题。本文档旨在分享一种解决思路,帮助开发者快速定位并解决此类问题。虽然不会提供具体的解决...

    VC6.0++乱码解决

    然而,当我们在代码中使用中文或其他非ASCII字符时,这些字符在ANSI编码下可能无法正确表示,从而导致乱码。 ### 解决方案 为了解决VC6.0中的乱码问题,我们可以通过以下步骤进行设置: 1. **打开“选项”对话框*...

    mybatis乱码的解决方法

    GBK是汉字的扩展GBK编码,包含了大部分简体中文字符,而ISO-8859-1是一种西欧语言的编码,不支持中文。在处理包含中文的数据时,如果编码设置不正确,就会出现乱码。 MyBatis中的乱码问题通常出现在以下几个环节: ...

    解决cocos2d中文乱码的项目

    在开发游戏或应用时,有时会遇到Cocos2d引擎显示中文字符时出现乱码的问题。这通常是由于编码设置不正确、字体资源不支持中文或者配置文件中的编码格式与实际内容不符导致的。本项目提供的"解决cocos2d中文乱码的...

    Xcode 打印中文乱码

    这个库可能已经考虑了中文字符的显示问题,因此安装并使用这个库可能会解决乱码问题。具体使用方法,你需要查看库的文档或源代码,了解如何配置和调用,以确保它能正确处理中文字符。 7. **环境变量**:在某些情况...

    解决fastreport3.18的exportPDF中文乱码方法

    6. **调试和测试**:在修改了设置后,务必进行充分的测试,确保所有报表都能正确显示中文字符。同时,也要注意其他非英文字符的显示情况,防止出现新的乱码问题。 通过以上步骤,你应该能够解决FastReport 3.18在...

    jd-gui 1.6.6 -- java反编译中文复制无乱码

    5. **复制无乱码**:这是jd-gui 1.6.6的一大亮点,用户可以放心地复制和粘贴代码,而不用担心中文字符的乱码问题。 **应用场景** 1. **代码分析**:当需要分析未知或第三方的Java库时,jd-gui可以帮助理解其内部...

    jd-gui-1.6.6 反编译工具修复代码复制中文丢失、中文显示乱码问题

    在新版本中,jd-gui-1.6.6对字符编码的支持有了显著提升,无论是显示还是编辑,都能确保中文字符的正确显示,使得开发者在查看源码时能更加顺畅地理解代码含义。 此版本提供的jd-gui-gbk.exe和jd-gui-utf8.exe两个...

    ACCESS+ASP中文乱码问题的解决方法借鉴.pdf

    ACCESS+ASP中文乱码问题的解决方法借鉴 ...解决 ACCESS+ASP 中文乱码问题需要结合实际情况,选择正确的解决方法,并注意编码方式、字符集和编辑器设置等因素,以确保 Web 应用程序的中文字符正确显示。

Global site tag (gtag.js) - Google Analytics