我在表格中有一个字段,其中包含字符串“Address Pippo p.2°”。 我的程序读取此值并将其写入txt文件,但输出为:
“地址Pippo p.2°”(Â是不需要的)
我遇到问题,因为txt文件是位置文件。
我用这些Java结构打开文件: FileWriter fw = new FileWriter(file,true); pw = new PrintWriter(fw);
我想写没有奇怪字符的字符串
对我有任何帮助吗?
提前致谢
答案 0 :(得分:1)
尝试将字符串编码为UTF-8,如下所示
File file = new File("D://test.txt");
FileWriter fw = new FileWriter(file, true);
PrintWriter pw = new PrintWriter(fw);
String test = "Address Pippo p.2 °";
ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(test);
test = StandardCharsets.UTF_8.decode(byteBuffer).toString();
pw.write(test);
pw.close();
答案 1 :(得分:1)
Java使用Unicode。将文本写入文件时,会使用特定的字符编码对其进行编码。如果未明确指定它,它将使用“系统默认编码”,这是您为特定JVM实例配置为默认值的任何内容。您需要知道用于编写文件的编码。然后,您需要使用相同的编码来读取和显示文件内容。您看到的有趣角色可能是因为使用UTF-8编写文件,然后尝试阅读并在例如记事本使用Windows-1252(“ANSI”)编码。
决定你想要的编码,并坚持阅读和写作。要使用Windows-1252编写,请使用:
Writer w = new OutputStreamWriter(new FileInputStream(file, true), "windows-1252");
如果您使用UTF-8编写,请告诉记事本您希望它以UTF-8读取文件。一种方法是在文件的开头写下字符'\ uFEFF'(字节顺序标记)。
如果使用UTF-8,请注意非ASCII字符会将后续字节抛出位置。因此,例如,如果电话字段必须始终从字节位置200开始,那么在它之前在地址字段中使用非ASCII字符将使电话字段从字节位置201或202开始。使用Windows-1252编码您赢了没有这个问题,但该编码不能编码所有Unicode字符。