Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java读取unicode文本文件_Java_String_Unicode_Ascii - Fatal编程技术网

使用java读取unicode文本文件

使用java读取unicode文本文件,java,string,unicode,ascii,Java,String,Unicode,Ascii,非常简单的问题。我需要在Java程序中读取Unicode文本文件 我习惯于将纯ASCII文本与BufferedReader FileReader组合使用,这显然不起作用:( 我知道,我可以使用缓冲读取器以“传统”方式读取字符串,然后使用以下方式转换它: temp = new String(temp.getBytes(), "UTF-16"); Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8")); 但

非常简单的问题。我需要在Java程序中读取Unicode文本文件

我习惯于将纯ASCII文本与BufferedReader FileReader组合使用,这显然不起作用:(

我知道,我可以使用缓冲读取器以“传统”方式读取字符串,然后使用以下方式转换它:

temp = new String(temp.getBytes(), "UTF-16");
Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8"));
但是有没有一种方法可以把阅读器包装成一个“转换器”

编辑:文件以FF FE开始检查

我将使用如下内容读取源文件:

temp = new String(temp.getBytes(), "UTF-16");
Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8"));

您不会包装读取器,而是使用InputStreamReader包装流。 然后,您可以使用当前使用的BufferedReader将其包装起来

BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding));
一些注意事项:

  • “UTF-16”编码可以读取标有a的小端或大端编码文件;有关Java 6编码的列表,请参阅;没有明确说明使用“UTF-16”编写时将使用什么端(看起来是大端),因此在保存数据时可能需要使用“UnicodeLittle”
  • 使用字符串类编码/解码方法时要小心,尤其是使用标记的可变宽度编码,如UTF-16-
  • 正如其他人所说的,读取字符数据的最佳方式通常是使用一个字符串包装输入流;您可以使用一个或类似的缓冲区将其封装到单个字符串中

我建议使用Google Data API中的UnicodeReader,类似问题请参见。它将自动检测字节顺序标记(BOM)中的编码

你也可以考虑在Apache Con on IO中,它基本上是相同的,但不包括BOM的所有备选版本。

< P>我必须在创建输入流读取器中添加“UTF-8”,并且可以在中间看到特殊字符。

String s = new String(Files.readAllBytes(Paths.get("file.txt")),"UTF-8");
InputStreamReader istreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(istreamReader);

感谢您提供了编码类型的链接。我找到了适合我的类型。我想阅读希伯来文,我会用“编码”替换什么?回答我自己的问题,它是“UTF-8”'构造函数BufferedReader(InputStreamReader)未定义'?Scanner类是否特定于unicode?只是阅读代码(而没有意识到这些事情)很难确定这是否真的回答了这个问题。对于OP可能需要一些概念性理解以及代码的问题,在你的答案中包含一个简短的代码工作原理描述是很有用的。这样的描述在这里会很有用。此外,我编辑了你的帖子,将代码放在“代码标记”中请以后也这样做,因为它使阅读更容易。欢迎使用StackOverflow!