- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
String newStr = new String(oldStr.getBytes(), UTF-8);
java 中的 String 类是按照 unicode 进行编码的,当使用 String(byte[] bytes, String encoding)构造字符串时,encoding 所指的是 bytes 中的数据是按照那种方式编码的,而不是最后产生的 String 是什么编码方式,换句话说,是让系统把bytes 中的数据由 encoding 编码方式转换成unicode 编码。如果不指明,bytes 的编码方式将由jdk 根据操作系统决定。
当我们从文件中读数据时,最好使用InputStream 方式,然后采用 String(byte[] bytes, String encoding)指明文件的编码方式。不要使用Reader 方式,因为Reader 方式会自动根据jdk 指明的编码方式把文件内容转换成unicode 编码。
当我们从数据库中读文本数据时,采用ResultSet.getBytes()方法取得字节数组, 同样采用带编码方式的字符串构造方法即可。
ResultSet rs;
bytep[] bytes = rs.getBytes();
String str = new String(bytes, gb2312);
不要采取下面的步骤。
ResultSet rs;
String str = rs.getString();
str = new String(str.getBytes(iso8859-1), gb2312);
这种编码转换方式效率底。之所以这么做的原因是,ResultSet 在getString()方法执行时,默认数据库里的数据编码方式为 iso8859-1。系统会把数据依照iso8859-1 的编码方式转换成 unicode 。使用 str.getBytes(iso8859-1)把数据还原, 然后利用 new String(bytes, gb2312)把数据从 gb2312 转换成unicode,中间多了好多步骤。
从 HttpRequest 中读参数时,利用 reqeust.setCharacterEncoding()方法设置编码方式,读出的内容就是正确的了。
先说 Java。
JVM 里面的任何字符串资源都是Unicode,就是说,任何 String 类型的数据都是 Unicode 编码。没有例外。既然只有一种编码,那么,我们可以这么说,JVM 里面的String 是不带编码的。String 相当于 char[]。
JVM 里面的 byte[] 数据是带编码的。比如,Big5,GBK,GB2312,UTF-8 之类的。一个GBK 编码的byte[] 转换成 String,其实就是从GBK 编码向Unicode 编码转换。
一个String 转换成一个Big5 编码的byte[],其实就是从 Unicode 编码向Big5 编码转换。所以, Unicode 是所有编码转换的中间介质。所有的编码都有一个转换器可以转换到
Unicode,而Unicode 也可以转换到其他所有的编码。这样构成了一个总线结构。
比如,如果总共有10 种编码,那么只需要 10 + 10 = 20 个转换器就够了。如果要是两两直接转换,那么,需要的转换器数量是一个组合数字,需要90 个转换器。
一个系统的不同部分,都有自己的编码。比如,数据库,文件,JVM,浏览器这 4 个部分。在这些部分之间数据交换的地方,就会出现编码问题。比如,数据库和JVM 之间,文件和
JVM 之间,浏览器和JVM 之间。这些问题的原理都是相通的。
编码问题最容易处理的地方是文件和JVM 之间。文件 IO API 带有encoding 参数,请自行查阅。
最不容易出现编码问题的地方是数据库和JVM之间。这应该是数据库JDBC 连接的基本功能。本文不专门进行讨论。
最容易出问题的地方是浏览器和服务器JVM 之间(其实,代码里面的字符串更容易出问题, 不过,我已经事先声明,本文不讨论代码中的字符串编码)。下面主要讨论这块浏览器和服务 器 JVM 之间的编码问题。
我们把浏览器编码叫做 Browser_Charset,把 JVM 编码叫做 JVM_Charset(通常等于服务器系统编码)。
当浏览器的数据过来的时候,是一个带有Browser_Charset 的 byte[]。
如果用户处理程序需要一个String 类型的数据,那么 JVM 会好心好意地把这个 byte[]转换成 String。使用的转换器是 JVM_Charset - Unicode。
注意,如果这个时候,Browser_Charset 和 JVM_Charset
您可能关注的文档
- ICC曲线分析和总结.docx
- ICT原理分析和总结.docx
- ICT知识分析和总结.docx
- ICU新入护士测试题.docx
- IC制程问题 集成电路产品的质量控制的几个关键点.docx
- IDP个人发展计划 三篇.docx
- IIS_PHP5.3_MySQL5.1_Gzip详细教程分析和总结.docx
- IMD技术推介分析和总结.docx
- Impact of Yangshan Terminal Opening on ports competition in Northeast Asia分析和总结最新分析和总结.docx
- ImTOO Video Converter Ultimate 7.4.0注册码分析和总结.docx
最近下载
- 第十章正交试验设计.ppt VIP
- 鲁拜集(黄克孙郭沫若对照).pdf VIP
- (2025秋新版)青岛版三年级科学上册《5 .制作动物分类图册》PPT课件.pptx VIP
- 2025年(精品)成都七中学校自主招生考试试题 .pdf VIP
- 小学二年级新学期家长会班主任发言稿.docx VIP
- 现浇箱梁专项施工方案.doc VIP
- 北师大版数学二年级下册 长方形与正方形.ppt VIP
- QFSN-600-2型发电机铁心损坏分析 Analysis on Damage of QFSN-600-2 Generator Core.pdf VIP
- 小学二年级新学期家长会班主任发言稿.pdf VIP
- 小箱梁吊装履带吊安拆方案.docx VIP
文档评论(0)