在java中读取unicode字符

Rak*_*esh 3 java unicode file

当我分配一个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字符.如果我想将文件内容也打印为正在打印的字符串,我知道如何做到这一点.

And*_*Dog 5

你的代码应该是正确的,但我想文件"a.txt"不包含用UTF-8编码的Unicode字符,而是包含转义字符串"\ u0142o\u017Cy\u0142".

请使用支持UTF-8的编辑器检查文本文件是否正确,例如Windows上的最新版本的Notepad或Notepad ++.或使用您喜欢的十六进制编辑器编辑它 - 它不应包含反斜杠.

我尝试用"€"作为文件的UTF-8编码内容并正确打印.请注意,并非所有Unicode字符都可以打印,具体取决于您的终端编码(在Windows上真的很麻烦)和字体.


Ste*_*n P 5

Java解释\u0142了源代码中的unicode转义,例如你在源代码中实际输入了那个字符(带有笔划的拉丁小写字母L).Java并没有解释Unicode转义字符,它从文件中读取.

如果您将String str = "\u0142o\u017Cy\u0142";a.txt从Java程序中读取并写入文件,然后在编辑器中打开该文件,您将在文件中看到字符本身,而不是\uNNNN序列.

如果您随后使用原始发布的程序并阅读 a.txt文件,您应该看到您的期望.