将GB2312转换为UTF-8

时间:2008-12-18 20:43:29

标签: unicode utf-8 gb2312

我有一个文本文件,其中包含当前以GB2312(简体中文)编码的本地化语言字符串,但我的所有其他语言文件都是UTF-8。我发现使用这个文件非常困难,因为我的文本编辑器都不能正常使用它并继续破坏它。有没有工具可以将其转换为UTF-8,这样做有什么缺点吗?将它保留为GB2312并使用不同的编辑器(如果是这样,你能推荐一个)会更好吗?

更新:我正在使用Windows XP(英语安装)。

更新#2:我尝试使用Notepad ++和Notepad2编辑GB2312文件,但两者都无法读取文件并损坏它们。

4 个答案:

答案 0 :(得分:7)

您可以尝试使用开源iconv实用程序的online service 您还可以在计算机上安装Charco命令行版本。

对于GB2312,您可以使用CP936作为编码。

如果您是.Net开发人员,您可以制作一个可以做到这一点的小工具 我也在努力解决这个问题,并发现从程序化的角度来看它实际上很简单。

你需要的就是这样的东西(我测试了它并且它有效):

在C#

static void Main(string[] args) {
    string infile = args[0];
    string outfile = args[1];

    using (StreamReader sr = new StreamReader(infile, Encoding.GetEncoding(936))) {
        using (StreamWriter sw = new StreamWriter(outfile, false, Encoding.UTF8)) {
            sw.Write(sr.ReadToEnd());
            sw.Close();
        }
        sr.Close();
    }
}

在VB.Net

Private Shared Sub Main(ByVal args() As String)
    Dim infile As String = args(0)
    Dim outfile As String = args(1)
    Dim sr As StreamReader = New StreamReader(infile, Encoding.GetEncoding(936))
    Dim sw As StreamWriter = New StreamWriter(outfile, false, Encoding.UTF8)
    sw.Write(sr.ReadToEnd)
    sw.Close
    sr.Close
End Sub

答案 1 :(得分:3)

我可能在这里想的有点过于简单,但如果它只是这个纯文本文件,你可以尝试以下方法:

  1. 将所有&改为&amp;,将所有<改为&lt;,将所有>改为&gt;(为安全起见)
  2. 将以下内容添加到文本文件中:

    <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><pre>

  3. 在您喜欢的浏览器中打开文件

  4. 选择并复制所有文字
  5. 将其粘贴到记事本中并另存为UTF-8。
  6. 在您编写任何代码进行转换或下载任何可以为您进行转换的程序之前,您已完成此操作。

    当然,我不是百分百肯定这会工作,你的浏览器需要正确的字体和一切,但考虑到你正在使用这些类型的文件,我假设你已经有了这些。

答案 2 :(得分:2)

GB 2312主要与GB 18030兼容,因此任何能够处理后者的工具也应正确处理GB 2312。有许多工具可以将GB 18030转换为UTF-8(或其他一些Unicode编码形式),但我不能推荐任何特定的Windows,因为我在Unix上工作。如果您想编写一些代码,可以考虑使用iconv库或ICU:您可以在这些库中找到所有转换数据。

从GB 2312到UTF-8的转换是完全安全无损的,您不必担心。

答案 3 :(得分:0)

我同意当前选择的答案,因为“发现从程序化的角度来看,它实际上很容易解决”,尤其是当您的源文件包含您不想向未知的 3rd 方公开的敏感信息时在线服务。

而且,现在 Python 在大多数 Linux 环境中都是开箱即用的,并且也很容易安装在 Windows 环境中(比安装 C# 堆栈更容易,恕我直言)。所以,不用多说,这是可以将 GB2312 转换为 UTF8 的 2 行 Python 脚本。我测试过了,它有效。

# Usage: python this_script.py your_input.txt your_output.txt
import io, sys
io.open(sys.argv[2], "w", encoding="utf-8").write(io.open(sys.argv[1], encoding="gb2312").read())