扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
运行时阶段
在运行过程中J2EE应用很可能会与其它外部系统通信。应用也许会读写文件,或者用数据库管理数据,有时候还可能用LDAP(轻量目录访问协议)服务器存储标识信息。在这些情况下,J2EE应用和外部系统之间需要进行数据交换。如果数据中带有象中文这样的多字节字符,就可能会遇到问题。
大部分的外部系统都有他们自己的编码设置。例如LDAP服务器很可能使用UTF-8对字符编码;Oracle数据库系统用环境变量NLS_LANG来指定编码方式。如果Oracle是安装在中文操作系统上,该变量的默认设置为ZHS16GBK,也就是用GBK编码方式来存储中文字符。因此当J2EE应用的编码设置与外部系统不同时需要进行转码,通常用以下代码来完成这一工作:
|
以上代码给出了如何将字符串从一种编码方式转换为另一种。例如你在LDAP服务器中用UTF-8编码存储了一个用户名(多字节字符),而在J2EE应用中用的却是GBK编码,因此当应用从LDAP服务器中取用户名时就可能被错误地编码。
要解决这个问题,可以用original.getBytes("GBK")得到原始的字节,然后用new String(defaultBytes, "UTF-8")构造一个新字符串,这样就可以正确显示了。
客户端显示阶段
现在大多数J2EE应用都采用浏览器/服务器架构,以浏览器作为客户端。要在浏览器里正确显示多字节字符,需要注意以下几个方面:
浏览器语言支持:
为能正确地显示多字节字符,浏览器及其所运行的操作系统应提供对特定语言的支持,比如字体和字码表。
浏览器编码设置
服务器返回的HTML头
|
向浏览器声明了该页面使用的编码方式,否则浏览器将使用默认编码设置或自动进行匹配。当然,用户也可以对页面的编码进行设定,如图6所示。
因此如果页面没有声明,多字节字符就可能显示不正确,在这种情况下用户必须手工设定当前页面的编码方式。
HTTP POST编码
用HTML页面的Form标签向服务器提交数据会使情况变得更为复杂。浏览器的编码方式取决于当前页面的编码设定,对Form标签也照此处理。这意味着如果ASCII格式的HTML页面用ISO-8859-1编码,那么用户在此页面中将不能提交中文字符。
这是因为所有提交的数据都用ISO-8859-1编码,这将使中文字符丢失字节。所有的浏览器都遵守这个HTML标准。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者