我有一个文件,当显示与geanny *显示UTF-16BE。如果我试图在Java中将这个文件转换成不同的编码(假设它是UTF-16BE,一个问号(?)每次出现在新创建的文件的开头。如果我假设它在UTF-16中(这不是真的),那么转换后的文件就会被转换为ok,在开始时没有任何问号。有人能解释一下为什么会这样吗?
Bellow是我用过的代码的片段:
StringBuilder sb = new StringBuilder();
BufferedReader buff = new BufferedReader(new InputStreamReader(inputStream, utf16beCharset));
String line = null;
while ( (line = buff.readLine()) != null) {
sb.append(line);
sb.append('\n');
}
String output = new String(sb.toString().getBytes(neededCharset), neededCharset);
System.out.println(output);* geanny是一个文本编辑器
发布于 2015-04-15 11:22:52
您的问题是BOM (字节顺序标记)。
如果将字符集定义为UTF-16,则Java将识别BOM并在读取后删除它。BOM然后告诉Java字符流是(UTF-16)BE。
如果定义了UTF-16BE,则告诉Java忽略BOM,Java忽略它并将其写入目标文件。
https://stackoverflow.com/questions/29648752
复制相似问题