JAVA字符串编码转换问题
在netbeans中启动时,我有一段代码工作正常(该代码替换从.odt文件提取的content.xml文件中的一些字符串): 如果我在命令行中使用Windows中的代码,比如java-jar。。。。文件中保存的字符已中断转换。 我意识到这是因为windows在编码CP1250时起作用,而当我以java-jar的形式启动代码时,使用的是CP1250。问题是如何使其正常工作?我在命令行中不使用该代码,但在applet中,从applet运行的代码与从CP1250中的命令行运行的代码的行为完全相同 我读了很多关于编码的文章,但似乎没有任何帮助,只是使用指定的编码从命令行运行:JAVA字符串编码转换问题,java,utf-8,character-encoding,Java,Utf 8,Character Encoding,在netbeans中启动时,我有一段代码工作正常(该代码替换从.odt文件提取的content.xml文件中的一些字符串): 如果我在命令行中使用Windows中的代码,比如java-jar。。。。文件中保存的字符已中断转换。 我意识到这是因为windows在编码CP1250时起作用,而当我以java-jar的形式启动代码时,使用的是CP1250。问题是如何使其正常工作?我在命令行中不使用该代码,但在applet中,从applet运行的代码与从CP1250中的命令行运行的代码的行为完全相同 我读
java -Dfile.encoding=utf-8 -jar Office.jar
解决了这个问题
意识到我想将参数传递给applet标记:
<object classid='clsid:8AD9C840-044E-11D1-B3E9-00805F499D93' width='500' height='30'>
<param name='codebase_lookup' value='false'>
<param name='archive' value='" . ServerURL . "/applets/Office/Office.jar'>
<param name='code' value='OfficeApplet'>
<param name='java_arguments' value='-Dfile.encoding=utf-8'
<param name='data' value='" . $dataJSON . "'>
<comment>
<embed
codebase_lookup='false'
archive='" . ServerURL . "/applets/Office/Office.jar'
code='OfficeApplet'
width='500'
height='30'
java_arguments='-Dfile.encoding=utf-8'
data='" . $dataJSON. "'
type='application/x-java-applet'
>
<noembed>
You need JRE 1.7+
</noembed>
</embed>
</comment>
</object>
问题在于Utils.readBinaryFile(path+“/content.xml”)
可能没有使用UTF-8编码从文件中读取数据。我的猜测是,您在util方法中使用了默认编码,这会随着系统的不同而变化
要解决此问题,需要在readBinaryFile()
中指定文件的编码
InputStreamReader
是你的朋友。你写道:
String cont = new String(Utils.readBinaryFile(path + "/content.xml"));
构造函数使用平台默认编码(可以是任何编码)将字节转换为字符。最简单的修复方法是使用允许指定编码的构造函数;例如:
String cont = new String(Utils.readBinaryFile(path + "/content.xml"), "UTF-8");
不幸的是,输入文件的编码可以更改,我不想强制这样做。感谢Joni发送的第二个答案,我在代码中发现了这个BUG,无论如何,感谢您的时间和建议。我确信我也这么做了,但在编码方面仍然存在问题(我有一行注释)。然后我意识到我犯了错误。在原始代码中,我编写了stringcont=newstring(Utils.readBinaryFile(path+“/content.xml”,“UTF-8”);而不是字符串cont=新字符串(Utils.readBinaryFile(path+“/content.xml”),“UTF-8”);非常相似,但只有第二个是以正确的方式进行转换。非常感谢。
String cont = new String(Utils.readBinaryFile(path + "/content.xml"));
String cont = new String(Utils.readBinaryFile(path + "/content.xml"), "UTF-8");