.59&*(48&*(4
2
#$%&,
($%)('*+,-':,
$0#8(,
6
6
、 与数据库之间的乱码
大部分数据库都支持以 编码方式,所以解决 与数据库之间的乱码问题比
较明智的方式是直接使用 编码与数据库交互。很多数据库驱动自动支持 ,
如 ;< 的 => 驱动。其他大部分数据库驱动,可以在驱动的 参数中指定,如
如 的 # 驱 动 : /#/+++?&%>@"
A-B&-。
、 与文件+流之间的乱码
读写文件最常用的类是 05(+09( 和 07+0?。
其中 05( 和 09( 是基于字节流的,常用于读写二进制文件。读写字
符文件建议使用基于字符的 07 和 0?,省去了字节与字符之间的转换。但这
两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能
会 出 现 乱 码 。 在 这 种 情 况 下 , 建 议 使 用 07 和 0? 的 父 类 :
5(7+9(?,它们也是基于字符的,但在构造函数中可以指定
编 码 类 型 : 5(75( 8 % 和
9(?9(8%。
C、其他
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要
手动修改代码。解决 乱码问题的关键在于在字节与字符的转换过程中,你必须知道原
来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我
们以前使用 7 服务器,使用 A( 组件上传文件,上传文件同时传递的中文参数
获取没有乱码问题。当在 >* 中把 7 设置成服务后,上传文件同时的中文参数获取出
现了乱码。这个问题困扰了我们很久,后来我们分析 A( 组件的源文件,因为文
件上传采用的是字节流的方式,里面包含的参数 名称和值也是字节流的方式传递的
A( 组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在
A( 将字节流转换成字符串时采用了系统默认的编码,而将 7 设置成服务后,