如何将UTF-8文字转换为UTF-8字符?

时间:2011-11-04 07:00:41

标签: java utf-8

我有一堆用UTF-8编码的文本文件。文件中的文本如下所示:\x6c\x69b/\x62\x2f\x6d\x69nd/m\x61x\x2e\x70h\x70

我已经复制了所有这些文本文件,并将它们放入目录/convert/

我需要读取每个文件并将编码的文字转换为字符,然后保存文件。 filename.converted.txt

最聪明的做法是什么?如何转换为新文本?是否有处理Unicode文本的函数在文字类型之间进行转换?我应该使用不同的编程语言吗?

这就是我现在所拥有的:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class decode {
    public static void main(String args[]) {
        File directory = new File("C:/convert/");
        String[] files = directory.list();
        boolean success = false;
        for (String file : files) {
            System.out.println("Processing \"" + file + "\"");

            //TODO read each file and convert them into characters
            success = true;

            if (success) {
                System.out.println("Successfully converted \"" + file + "\"");
            } else {
                System.out.println("Failed to convert \"" + file + "\"");
            }

            //save file
            if (success) {
                try {
                    FileWriter open = new FileWriter("C:/convert/" + file + ".converted.txt");
                    BufferedWriter write = new BufferedWriter(open);
                    write.write("TODO: write converted text into file");
                    write.close();
                    System.out.println("Successfully saved \"" + file + "\" conversion.");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

(看起来有些混淆你的意思 - 这个答案假定输入文件完全是ASCII,并使用“\ x”对任何不在ASCII范围内的字节进行十六进制编码。)

听起来像UTF-8的一部分实际上是无关紧要的。您可以将其视为输出的不透明二进制数据。假设输入文件完全是ASCII:

  • 以文字形式打开输入文件(例如,使用包含在FileInputStream中的InputStreamReader指定编码“US-ASCII”)
  • 以二进制形式打开输出文件(例如,使用FileOutputStream
  • 从输入中读取每个字符
  • 是吗?\'?
    • 如果没有,请将字符的ASCII值写入输出流(仅从charbyte的情况)
    • 下一个角色是什么?
    • 如果它是'x',读取接下来的两个字符,将它们从十六进制转换为一个字节(有很多代码可以执行此部分),并将该字节写入输出流
    • 如果是'\',请将'\'的ASCII值写入输出流
    • 否则,可能会抛出指示失败的异常
  • 循环,直到用完输入文件
  • 关闭finally块中的两个文件

然后你将拥有一个“普通”的UTF-8文件,任何支持UTF-8的文本编辑器都可以读取该文件。

答案 1 :(得分:0)

java.io.InputStreamReader可用于将来自任意字符集的输入流转换为Java char。不过,我不确定你想怎么写它。您是否希望将非ASCII字符写为ASCII Unicode转义序列?