2012-10-26 108 views
3

我已经得到了希望使用ANSI编码写入文件的Java字符串ôð¤ Ø$î1<¨ V¸dPžÐ À[email protected]ˆàÀༀ@〜€4`。使用特殊编码将Java字符串写入文件

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output),"windows-1252")); 
    try { 
     out.append(str); 
    } finally { 
     out.close(); 
    } 

调试说str包含ôð¤ Ø$î1<¨ V¸dPÐ À[email protected]àÀà¼@〜4。只要我将它写入输出文件,该文件只包含?ÒÜ@4。所以我的方法写入文件有什么问题?

对不起,这个奇怪的字符串 - 我想重写java中的delphi 7函数。这些字符串是我得到的唯一样本。

+0

它是否抛出任何异常? –

+1

你用什么来读取输出文件?除非*也使用Windows-1252,否则你会得到不好的结果。也有可能并非所有这些值都在* Windows-1252中。 –

+0

你确定你正在查看该文件吗?文件的长度是多少?它是〜5还是〜32的长度?不支持的角色应该像第一个角色一样变成'?',而不是消失。 –

回答

5

如果我运行

String text = "ôð¤ Ø$î1<¨ V¸dPžÐ À[email protected]ˆàÀༀ@`~€4"; 
Writer writer = new OutputStreamWriter(new FileOutputStream("test.txt"), "windows-1252"); 
writer.append(text); 
writer.close(); 
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "windows-1252")); 
String line = br.readLine(); 
br.close(); 
System.out.println(line.length() + ": '" + line + "' matches " + line.equals(text)); 

它打印

32: 'ôð¤ Ø$î1<¨ V¸dPžÐ À[email protected]ˆàÀༀ@`~€4' matches true 

所以没有字符迷失东京。


如果我更改编码为 “US-ASCII” 我得到以下输出

32: '??? ?$?1<? V?dP?? [email protected][email protected]`~?4' matches false 
+0

如果我这样做,一切都是精细。似乎硬编码字符串和计算它们之间存在差异。 – gorootde

+1

@ k_wave也许调试器选择错误编码 –

+0

这就是要点。调试器编码是否设置为ANSI。该字符串与发布的字符串不同。所以彼得是对的。 – gorootde