我有一段代码,做工精细在NetBeans启动时(此代码替换的content.xml文件中的一些字符串从的.odt文件中提取):JAVA字符串编码转换问题
String cont = new String(Utils.readBinaryFile(path + "/content.xml"));
for (Patterns p : patterns) {
cont = cont.replaceAll(p.search.replaceAll("\\{", "\\\\{"), p.replace.replaceAll("\n", "<text:line-break/>").replaceAll("\\{", "\\\\{"));
}
Utils.saveToFile(path + "/content.xml", cont.getBytes("UTF-8"), false);
和
/**
* Saves the binary data to the file, if append is FALSE, the data in the file is overwritten
* @param fileName
* @param data
* @param append
*/
public static void saveToFile(String fileName, byte[] data, boolean append) {
try {
try (FileOutputStream out = new FileOutputStream(fileName, append)) {
out.write(data);
}
} catch (IOException iOException) {
System.err.println(iOException.getMessage());
}
}
如果我在命令行中使用Windows中的代码,如java -jar ....保存在文件中的字符已损坏转换。 我意识到它来自于事实,Windows在编码CP1250的情况下工作,当我开始我的代码为java -jar使用CP1250。问题是如何使这工作正常?我不在命令行中使用该代码,但是在applet中,从applet运行的代码与从CP1250中的命令行运行的代码完全相同。
我读到编码,但似乎没有什么帮助了我很多文章,但在命令行与指定的编码运行:
java -Dfile.encoding=utf-8 -jar Office.jar
解决的问题。
意识到我当时就想参数传递给我的小程序标签:
<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>
正如你可以看到我使用java_arguments标签,但它似乎并没有帮助或也许java_arguments被传递到JVM以错误的方式或论据被忽略,我不知道。有人可以帮我解决这个问题吗?我使用Windows 7 64位。 在此先感谢。
我确信我也是这样做的,仍然有编码问题(我有一条评论线)。 然后我意识到我犯了错误。在我写的原始代码中 String cont = new String(Utils.readBinaryFile(path +“/content.xml","UTF-8”)); 而不是 String cont = new String(Utils.readBinaryFile(path +“/content.xml"),"UTF-8”); 非常相似,但只有第二个以正确的方式进行转换。谢谢。 – norbi771