我有“excused”一个文本文件。我用 java'sBufferReader.readLine()把它读成一个 String s,s 变成了“excusedâ€?.
我用过s = s.replace("“","&ldquo");,它做了更换。
然而s = s.replace("â€?","&rdquo");并没有进行更换。
我在我的主要方法中测试了以下几行:
String t = "� test";
System.out.println(t);
t = t. replace("�","&rdquo");
System.out.println(t);
Run Code Online (Sandbox Code Playgroud)
这确实将 t 变成了&rdquo test,为什么对replace()从文本文件中读入的字符串不起作用?谢谢,
似乎您正在使用不正确的编码读取文件。看起来该文件是使用 UTF-8 编码的,但您正在使用系统默认编码(系统上的 cp1252)读取它。"“"UTF-8 中的字符编码为三个字节:E2 80 9C对应"“"于cp1252。尝试明确指定编码:
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileReader(myFile), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
或者在 Java-7 中更好(UTF-8 编码由 自动使用Files.newBufferedReader):
BufferedReader br = Files.newBufferedReader(Paths.get(myFileName));
Run Code Online (Sandbox Code Playgroud)
至于为什么更换不起作用。UTF-8 for "”"is E2 80 9D,但9D不是问号,它只是 cp1252 中的一个非法字符(它在表中根本不存在),因此当您阅读时,它被替换\uFFFD为表示非法字符的特殊 unicode 代码点。但即使它显示为问号,它也是另一个字符。而且您正在替换问号,而不是非法字符,因此它不会被替换。
| 归档时间: |
|
| 查看次数: |
3924 次 |
| 最近记录: |