[英]How to deal with UTF-16LE encoded text file using Java? or convert it to ASCII?
如果之前有人问过,我很抱歉。 我正在尝试使用 Java 处理文本文件。 文本文件从 MS SQLServer 导出。 当我在 PSPad 中打开它(一种文本编辑器,我可以在其中查看任何十六进制格式的文件),它告诉我我的文本文件是UTF-16LE
。 因为我是从别人那里得到的,所以很有可能。
现在我的 Java 程序无法处理该格式。 所以我想知道是否有任何方法可以将我的文本文件转换为ASCII
格式或进行一些预处理或其他什么? 我可以修改文件。
任何帮助是极大的赞赏。
谢谢。
编辑 1
我编写了这个程序,但它没有按预期工作。 如果我在 PSPad 中看到 output 文件,我可以将每个字符视为 2 字节字符,例如“2”是 3200 而不是 32; 'M' 是 4D00 而不是 4D 等。尽管说 output 文件的编码是 UTF-8。 我在这里有点困惑。 谁能告诉我我做错了什么?
public static void main(String[] args) throws Exception {
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream(
"input.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-16LE"));
String strLine;
// Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Write to the file
writeToFile(strLine);
}
// Close the input stream
in.close();
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
System.out.println("done.");
}
static public void writeToFile(String str) {
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt", true), "UTF-8");
BufferedWriter fbw = new BufferedWriter(writer);
fbw.write(str);
fbw.close();
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
编辑 2
以下是快照:
PSPad 中的输入文件(免费的十六进制查看器)
PSPad 中的 output 文件
这是我期望看到的:
为字符集 UTF-16LE 创建一个 InputStreamReader,您将一切就绪。
InputStreamReader将让您在 memory 中加载 UTF-16EL。 然后,您可以执行您需要的所有字符串操作。 然后,您可以使用OutputStreamWriter保存为 ASCII 格式。 使用CharSet为 select 格式。
刚刚找到了解决办法。
http://www.fileformat.info/convert/text/utf2utf.htm
允许您在编码之间上传和转换。
但它不是一个永久的解决方案,因为我的文件是 700MB+。 所以我会尝试其他人发布的一些解决方案。
这个小软件有助于:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.