我最近发现依赖JVM的默认编码会导致错误。我应该明确使用特定的编码ex。使用String
,InputStreams
等时, UTF-8
我有一个巨大的代码库来扫描以确保这一点。有人可能会建议我检查一下比搜索整个代码库更简单的方法。
由于 Nayn
答案 0 :(得分:4)
System.getProperty("file.encoding")
返回i / o操作的VM编码
您可以通过传递-Dfile.encoding=utf-8
答案 1 :(得分:3)
不是一个直接的答案,但为了简化工作,很高兴知道在一个不错的IDE中你可以搜索用于InputStreamReader
,OutputStreamWriter
的已用事件, String#getBytes()
,String(byte[])
,Properties#load()
,URLEncoder#encode()
,URLDecoder#decode()
以及您可以通过字符集然后相应更新的配方。您还想搜索FileReader
和FileWriter
,并将其替换为前两个提及的类。没错,这是一项繁琐的工作,但值得一试,我更愿意依赖于环境细节。
在Eclipse中,例如,选择感兴趣的项目,点击 Ctrl + H ,切换到选项卡 Java Search ,输入例如InputStreamReader
,勾选搜索选项构造函数,选择源作为唯一的搜索选项,然后执行搜索。
答案 2 :(得分:0)
依赖于JVM的默认编码 导致错误
实际上,编码/解码时应始终指定字符集。
如果您对所有编码/解码的默认全局字符集感到满意(并不总是足够),您可以使用Bozho的答案:在JVM参数或某些静态初始化程序中指定已知的固定默认值。
但最好在代码中搜索所有隐式字符集规范,并用显式字符集编码替换它们:要查看的一些典型方法/类:FileWriter
,FileReader
,{{1 }},InputStreamReader
,OutputStreamWriter
,String#getBytes()
。
答案 3 :(得分:0)
如果文件是由服务器上的本机工具操纵的,则可能需要将编码设置为System.getProperty(“file.encoding”)。我两个方面都遇到了错误。
最佳做法是知道使用了哪个字符集,然后设置它。此外,如果文件用于与另一个应用程序连接,则应定义使用的字符集。这可能是一个Windows代码页或不同的UTF格式。