2017-10-11 84 views
0

我在表中包含字符串“Address Pippo p.2°”的字段。 我的程序读取此值,并将其写入txt文件,但输出是:字符在txt文件中的编码和可视化

“地址皮波第2页A°”(A是不需要的)

我有一个问题,因为txt文件是位置文件。我使用这些Java构造打开文件: FileWriter fw = new FileWriter(file,true); pw = new PrintWriter(fw);

我想写没有奇怪字符的字符串

对我有帮助吗?

在此先感谢

+0

你是什么意思“txt文件是位置文件”? – DodgyCodeException

+0

你没有用它编写的字符编码读取它,因此,[mojibake](https://en.wikipedia.org/wiki/Mojibake)。 –

回答

0

尝试将字符串编码成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(); 
+0

它的作品,但我想念的原因。目前没关系,谢谢 –

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字符。

+0

“任何配置为特定JVM实例的默认值”:[无论](https://en.wikipedia.org/wiki/Whatever_(俚语))是操作语。它随着系统,用户和用户的不同而不同。它可能正是想要的,但很少。 –