我有一段代碼,做工精細在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