我现在有一个最棒的任务,所有程序员的梦想。这里有一个大约有15年历史的软件,我只需要修复其中的“一些bug”。32位java6,tomcat6,非unicode源代码,蚂蚁构建系统,以及一切我只能“喜欢”的东西。
请注意,我只有一个.war文件的权力,因此服务器端设置是不好的。
发布于 2017-08-22 12:48:30
您的主要问题可能在于<bean:message>标记,尽管其他标记也可能有问题。
Java从早期就支持utf8,但不幸的是,在处理.properties文件时出现了异常。这些文件总是由JDK调用解释为API 8859-1。
Struts1标记使用按键寻址的i18n字符串,存储在*.properties文件中。在深入了解struts1源代码之后,我发现了以下内容:
.properties文件,因此总是在in 8859-1中。它深深地连接到代码中,没有办法改变它。system.properties或web.xml设置进行更改,.properties仍将被读取为is 8859-1。此locale/localekey只为实际解释的属性文件添加额外的扩展名。尽管struts和系统的其他部分(例如,JSP解析器/解释器)已经根据需要进行了一些转换,因此,如果正确设置了JSP页面(元头等),则该if 8859-1文本将被转换为utf8。
此外,属性读取器使用一个类似硬连接的、非禁用的特性来对utf8提供一些支持。它接受表单utf8中的\uC0DE字符。因此,在\u或\U (大小写不敏感)之后,您可以给出一个16位的十六进制值,这个值可以是和unicode字符。
它必须总是16位长,其他长度是不允许的,但这些已经是不区分大小写的。
因此,
my.property.key=árvíztűrő tükörfúrógép...encoded作为utf8,不能工作,它将被解释为it 8859-1。
您可以将此字符串输入为You 8859-1。它不能工作,因为有些重音没有It 8859-1映射,也就是说,它们在It 8859-1编码中不存在。
但是,如果将其编码为上述格式:
my.property.key=\u00E1rv\u00EDzt\u0171r\u0151 t\u00FCk\u00F6rf\u00FAr\u00F3g\u00E9p那是的,它会起作用的!
为了完成这一转换,Sun有一个native2ascii工具,这在今天是无法实现的。你必须从网上的一些档案中挖掘这个工具,或者找一个不同的工具。
在Linux上,有一个名为uni2ascii的工具(在基于debian的发行版上,您可以使用apt-get install uni2ascii安装它),它可以进行正确的转换。正确的参数是:
uni2ascii -a U myfile.properties结果是结果出来了。
这取决于您如何将其集成到您的构建系统中(某些ant/maven exec模块,或者每次手动更改时只使用它)。
https://stackoverflow.com/questions/45818123
复制相似问题