如何确保java程序使用UTF-8编码

时间:2010-06-07 16:20:54

标签: java utf-8

我最近发现依赖JVM的默认编码会导致错误。我应该明确使用特定的编码ex。使用StringInputStreams等时, UTF-8 我有一个巨大的代码库来扫描以确保这一点。有人可能会建议我检查一下比搜索整个代码库更简单的方法。

由于 Nayn

4 个答案:

答案 0 :(得分:4)

System.getProperty("file.encoding")

返回i / o操作的VM编码

您可以通过传递-Dfile.encoding=utf-8

来设置它

答案 1 :(得分:3)

不是一个直接的答案,但为了简化工作,很高兴知道在一个不错的IDE中你可以搜索用于InputStreamReaderOutputStreamWriter的已用事件, String#getBytes()String(byte[])Properties#load()URLEncoder#encode()URLDecoder#decode()以及您可以通过字符集然后相应更新的配方。您还想搜索FileReaderFileWriter,并将其替换为前两个提及的类。没错,这是一项繁琐的工作,但值得一试,我更愿意依赖于环境细节。

在Eclipse中,例如,选择感兴趣的项目,点击 Ctrl + H ,切换到选项卡 Java Search ,输入例如InputStreamReader,勾选搜索选项构造函数,选择作为唯一的搜索选项,然后执行搜索。

答案 2 :(得分:0)

  

依赖于JVM的默认编码   导致错误

实际上,编码/解码时应始终指定字符集。

如果您对所有编码/解码的默认全局字符集感到满意(并不总是足够),您可以使用Bozho的答案:在JVM参数或某些静态初始化程序中指定已知的固定默认值。

但最好在代码中搜索所有隐式字符集规范,并用显式字符集编码替换它们:要查看的一些典型方法/类:FileWriterFileReader,{{1 }},InputStreamReaderOutputStreamWriterString#getBytes()

答案 3 :(得分:0)

如果文件是由服务器上的本机工具操纵的,则可能需要将编码设置为System.getProperty(“file.encoding”)。我两个方面都遇到了错误。

最佳做法是知道使用了哪个字符集,然后设置它。此外,如果文件用于与另一个应用程序连接,则应定义使用的字符集。这可能是一个Windows代码页或不同的UTF格式。