平台默认字符编码如何影响跨平台性能

时间:2011-04-07 13:36:12

标签: java performance character-encoding

我已经读过使用平台默认字符编码的坏主意,例如在阅读文本文件并将文本导入数组等时。您能否解释一下这可能会影响跨平台性能,以及如何解决这个问题?是否存在应该用于跨平台应用程序的编码?感谢

3 个答案:

答案 0 :(得分:7)

这不是关于性能,而是关于显示和阅读正确编码的文本。有很多方法可以解决这个问题:

  • 设置JVM选项-Dfile.encoding=utf-8
  • 始终使用重载了字符编码参数的方法。这些是StringReaderWriter等等。

我认为后者是必须的。如果你总是设置jvm选项,它会起作用,但是如果你忘了在某个时候设置它,那么在随机的地方就会出现意外的失败。

另一个问题 - 坚持使用UTF-8。

另见this question

答案 1 :(得分:2)

如果不在平台之间交换读写文件,通常没问题。但是如果你有例如在Windows上创建的配置文件(Win1252,类似于ISO8859-1编码),然后在最近的Linux(UTF-8编码)上启动你的应用程序,配置文件几乎所有字符都会出现问题127(如德语面疙瘩ä) ,ö,ü或€符号或类似字符。)

在这种情况下,只需指定您始终使用任一编码,并坚持使用它。如果你只使用纯ASCII(非拉丁语扩展!)文件,到目前为止你不会遇到问题。

答案 2 :(得分:2)

默认编码因操作系统而异,甚至在某些多语言安装的情况下也会在同一台计算机上的用户之间。这意味着应用程序编写的字符数据会有所不同,如果使用不同的默认编码读取,则不会显示/显示损坏。欧元字符(€)将编码为windows-1252下的字节80,ISO-8859-15下的A4和UTF-8下的E2 82 AC

传统编码可能导致data loss,因为其中许多只支持一小部分代码点。

更改默认编码的only supported way是在操作系统中更改它。

通常最好明确选择编码并选择无损Unicode编码(通常是UTF-8。)例如,在Windows上使"ANSI"编码默认编码的决定更有意义。 Windows 95。