`
xiaoluobo6666
  • 浏览: 13749 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

字符集?

    博客分类:
  • java
阅读更多
今天在用Flex的XMLSocket通讯时,中文总是出现乱码,搞的莫名其妙的,最后终于调试好了。忙了一晚上,总结一下吧。。。
当然,大部分都是实践中归纳出的信息,还没通过理论验证,欢迎指出错误。

所谓的忙了一晚上,其实,现在想想,所谓的解决方案也就无非是String的两个方法
String(byte[] bytes, String charsetName) //使用指定的字符集(charsetName),将byte构造成一个String

 byte[] getBytes(Charset charset) //使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 


描述一下遇到的问题吧,Flex的客户机文件是使用的UTF-8进行的编码,而服务器java端是使用的gbk进行的编码。所以Flex端发送的数据是使用的utf-8的格式。而在服务器接受数据的时候,如果没有进行处理,则是使用gbk的格式解析接受到的客户机发送来的utf-8格式的编码。因此,服务器中的中文就出现了乱码。

而处理的话,只要将得到的数据转换成utf-8格式的编码,就是中文了。方法很简单
xmlMsg = new String(xmlMsg.getBytes(),"utf-8");

//请注意,以上在本例中等同于
xmlMsg = new String(xmlMsg.getBytes("GBK"),"utf-8");


其中:xmlMsg.getBytes()中xmlMsg是读到的原始数据还原成byte数组的格式,然后根据这些数据重新创建一个utf-8格式的String。
因为在服务器端的编码格式是GBK,所以String的getBytes的方法默认就是通过GBK编码进行解析。
在这要注意一下了哦,读到的原始数据是utf-8的数组,但是默认使用gbk进行的编码,就产生了乱码,像加上了一把锁。而要把这把锁解开,首先要做的就是还原数据,即重新用gbk将其还原回去,然后,再将得到的byte数组,根据utf-8进行处理,得到其真正表示的中文。不是直接将其进行gbk的编码哦。

而服务器发送信息给客户机就简单了,只要调用
getBytes("utf-8")

即可,表示不用系统自己的gbk编码模式,而是使用utf-8的形式,然后,客户机默认得到对应的utf-8格式的中文,显示就没出现乱码了哦。



不过还是有点晕了,这个String的编码到底是个什么形式呢?
在文件系统中,数据无非就是0与1,而读取数据时,不同的字符集只不过不同的解释这些01组合的方法,而这些数据解析完放到内存后呢?找了些资料,大概如下:

Class 文件中的String都是使用unicode编码,具体说是utf-16的编码。
String或char为内存形式,而byte[]则是网络传输或存储的序列化形式。这两者不是同一等级上的概念。而String是保存在虚拟机中的常量池中的,一个String字符串可谓是独此一家,别无分号,不存在不同字符集的常量池。因此,不同字符集应该体现在,需要进行序列化的时候,对常量池中的同一个字符集的不同解析方式。就像是每种语言都有“你好”这个概念,但发音却各不相同。

恩,这是我目前的观点,还有不确定的地方,欢迎指教。
分享到:
评论
1 楼 dayanday 2012-07-13  
这种解决方法是不可能完全消除乱码的。
因为客户端发送的是UTF-8的字节流,服务端默认编码是GBK,系统会自动将UTF-8的字节流按照GBK转换成字符串,这个转换过程中可能产生不可逆转的乱码。
博主可测试一下,当客户端发送的中文串是连续的奇数个,最后一个中文是个乱码。
正确的做法:服务端直接读取客户端的字节流bytes(原始输入输出流),然后new String(bytes, "utf-8")

相关推荐

    sybase数据库配置中文字符集

    Q:为什么需要配置中文字符集? A:因为Sybase数据库默认的字符集不是中文字符集,需要手动配置中文字符集,以便正确地存储和显示中文字符。 Q:如何检查当前服务器的字符集安装情况? A:使用命令isql -U [服务器...

    sybase字符集及各种常用字符集介绍

    1. **什么是字符集?** - 字符集是一个包含了所有可能字符及其对应编码的集合。例如,ASCII字符集包含英文字符,而Unicode字符集则支持全球多种语言的字符。 - Sybase ASE支持多种本地字符集,如拉丁、希腊、...

    修改oracle字符集

    1. **什么是字符集?** 字符集(Character Set)是用于表示文本字符的集合,比如ASCII、GB2312、UTF-8等。在Oracle数据库中,字符集定义了可以存储在数据库中的字符范围和编码方式。 2. **NLS_CHARACTERSET** NLS...

    字符集与字符集编码简介

    字符集与字符集编码简介 我们知道,计算机只能识别诸如0101这样的二进制数,于是人们必须以二进制数据与计算机进行交互,或者先将人类使用的字符按一定规则转换为二进制数。 那什么是字符呢?在计算机领域,我们把...

    oracle字符集的查看和client字符集的修改

    ### Oracle字符集的查看与客户端字符集的修改 #### 一、Oracle字符集的基本概念 在Oracle数据库系统中,字符集(charset)是用于表示文本数据的编码方式。正确设置和管理字符集对于确保数据的一致性和正确性至关重要...

    Oracle 修改字符集

    ### Oracle 修改字符集 在Oracle数据库管理中,有时我们需要更改数据库的字符集以适应不同的语言环境或解决数据兼容性问题。本文将详细介绍如何修改Oracle数据库的字符集,并提供实际操作步骤。 #### 一、理解...

    香港增补字符集香港增补字符集香港增补字符集香港增补字符集[参照].pdf

    香港增补字符集香港增补字符集香港增补字符集香港增补字符集[参照].pdf

    Oracle 字符集详解

    Oracle字符集是数据库管理系统Oracle中的一个重要概念,它决定了数据库如何存储和处理文本数据。字符集不仅影响着数据的准确性和一致性,还与全球化应用、数据迁移和数据交换密切相关。本篇将深入探讨Oracle字符集的...

    oracle英文字符集插入到中文字符集

    "Oracle英文字符集插入到中文字符集"的主题聚焦于如何在不同字符集之间进行有效转换,以便在不修改客户端环境变量的情况下,实现数据的正确存储和检索。 Oracle数据库系统支持多种字符集,字符集决定了数据库如何...

    sybase 字符集

    ##### 1.1 什么是字符集? 字符集(Character Set)是一组符号与数值之间的一种对应关系。它定义了一种编码方式,用来表示文本中的各种字符。不同的字符集适用于不同的语言环境。在Sybase数据库系统中,字符集尤其...

    oracle修改字符集

    Oracle数据库的字符集是决定数据库如何存储和处理字符数据的关键因素。在某些情况下,由于字符集不匹配,可能会导致数据导入导出时出现问题,比如提到的.dmp文件无法正常导入到其他数据库。针对这种情况,我们可以...

    韩文、日文、繁体字的字符集,及字符集介绍

    在计算机科学领域,字符集(Character Set)是用于表示文本的一组符号集合,它定义了可以被编码的字符范围和编码方式。字符集对于不同语言的处理至关重要,尤其是在存储、显示和传输文本时。本篇文章将详细介绍韩文...

    oracle 字符集修改命令

    ### Oracle字符集修改命令详解 #### 一、引言 在Oracle数据库的管理与维护过程中,字符集的正确设置对于确保数据的正确显示与处理至关重要。由于不同的地区和语言环境对于字符编码的需求各异,因此有时可能需要...

    DB2 GBK 字符集解决方案.zip

    在处理中文字符时,字符集的选择至关重要,GBK字符集就是针对中文环境设计的一种多字节编码标准。本实践案例主要探讨如何在DB2环境中解决与GBK字符集相关的问题。 GBK字符集是中国大陆地区广泛使用的汉字编码标准,...

    MYSQL修改字符集默认问题

    在MySQL数据库管理与维护的过程中,修改字符集是一个常见的需求,特别是在需要处理多语言或特定编码格式的情况下。本文将详细介绍如何解决“MySQL修改字符集默认问题”,包括修改步骤、注意事项以及可能遇到的问题...

    怎样修改查看Oracle字符集及怎样修改字符集

    ### 如何查看与修改Oracle数据库字符集 #### 一、查看Oracle数据库字符集的方法 在Oracle数据库中,字符集主要用于确保数据能够正确地存储、检索和处理。了解数据库的字符集对于确保数据的一致性和准确性至关重要...

    Oracle字符集专题

    Oracle字符集专题是一个深入探讨Oracle数据库字符集配置、管理和常见问题解决的综合资源。这个专题涵盖了从基础概念到实际操作的多个方面,旨在帮助用户全面理解并有效处理与Oracle字符集相关的各种问题。 首先,...

    linux 下oracle中文乱码字符集设置

    Linux 下 Oracle 中文乱码字符集设置 Linux 下的 Oracle 数据库在导入数据库时出现中文乱码问题,这是因为 Oracle 数据库中的字符集格式不支持中文。解决方法是通过修改字符集格式,将其修改成支持中文的格式,这样...

Global site tag (gtag.js) - Google Analytics