当我分配一个unicode字符串时,我对java有点新鲜
String str = "\u0142o\u017Cy\u0142";
System.out.println(str);
final StringBuilder stringBuilder = new StringBuilder();
InputStream inStream = new FileInputStream("C:/a.txt");
final InputStreamReader streamReader = new InputStreamReader(inStream, "UTF-8");
final BufferedReader bufferedReader = new BufferedReader(streamReader);
String line = "";
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
stringBuilder.append(line);
}
Run Code Online (Sandbox Code Playgroud)
为什么在两种情况下结果都不同,文件a.txt也包含相同的字符串.但是当我打印文件的输出时,它打印z\u0142o\u017Cy\u0142而不是实际的unicode字符.如果我想将文件内容也打印为正在打印的字符串,我知道如何做到这一点.
你的代码应该是正确的,但我想文件"a.txt"不包含用UTF-8编码的Unicode字符,而是包含转义字符串"\ u0142o\u017Cy\u0142".
请使用支持UTF-8的编辑器检查文本文件是否正确,例如Windows上的最新版本的Notepad或Notepad ++.或使用您喜欢的十六进制编辑器编辑它 - 它不应包含反斜杠.
我尝试用"€"作为文件的UTF-8编码内容并正确打印.请注意,并非所有Unicode字符都可以打印,具体取决于您的终端编码(在Windows上真的很麻烦)和字体.
Java解释\u0142了源代码中的unicode转义,例如你在源代码中实际输入了那个字符(带有笔划的拉丁小写字母L).Java并没有解释Unicode转义字符,它从文件中读取.
如果您将String str = "\u0142o\u017Cy\u0142";其a.txt从Java程序中读取并写入文件,然后在编辑器中打开该文件,您将在文件中看到字符本身,而不是\uNNNN序列.
如果您随后使用原始发布的程序并阅读该 a.txt文件,您应该看到您的期望.
| 归档时间: |
|
| 查看次数: |
19574 次 |
| 最近记录: |