如果有人问过我很抱歉。我正在尝试使用Java处理文本文件。文本文件从MS SQLServer导出。当我在PSPad中打开它时(我可以在其中以十六进制格式查看任何文件的文本编辑器),它告诉我我的文本文件在UTF-16LE
中。因为我从其他人那里得到它,所以很有可能。
现在我的Java程序无法处理该格式。所以我想知道是否有任何方法可以转换ASCII
格式的文本文件或进行一些预处理或其他任何操作?我可以修改文件。
非常感谢任何帮助。
感谢。
编辑1
我写了这个程序,但它没有按预期工作。如果我在PSPad中看到输出文件,我可以将每个字符看作一个2字节的字符,例如'2'是3200而不是32; 'M'是4D00而不仅仅是4D等。尽管输出文件的编码是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
中的输出文件这是我期待看到的:
答案 0 :(得分:6)
为charset UTF-16LE创建一个InputStreamReader,你就可以了。
答案 1 :(得分:1)
InputStreamReader可让您在内存中加载UTF-16EL。然后,您可以执行所需的所有字符串操作。然后,您可以使用OutputStreamWriter保存为ASCII格式。使用CharSet选择格式。
答案 2 :(得分:0)
刚刚找到解决方案。
http://www.fileformat.info/convert/text/utf2utf.htm
允许您上传和转换编码。
它不是永久的解决方案,因为我的文件是700MB +。所以我会尝试其他人发布的一些解决方案。
这个小软件有助于: