【问题标题】:Convert GB2312 to UTF-8将 GB2312 转换为 UTF-8
【发布时间】:2008-12-18 20:43:29
【问题描述】:

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

更新:我使用的是 Windows XP(英文安装)。

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

【问题讨论】:

  • 哪个环境?视窗? Linux?
  • 对不起,它在 Windows XP 中(英文安装)。
  • 您可以尝试编写一个快速/小型的 java 实用程序,将文件读入 GB2312 的字符串,然后将其写回为 UTF-8。那应该可以。

标签: unicode utf-8 gb2312


【解决方案1】:

您可以试试这个使用开源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

【讨论】:

  • 你怎么知道GB2312映射到CP936?我在哪里可以找到将每个字符集与相应代码页相关联以支持任何语言的表格?
【解决方案2】:

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

  1. 将所有& 替换为&,将所有< 替换为<,将所有> 替换为>(为了安全起见)
  2. 将以下内容添加到文本文件中:

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

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

  4. 选择并复制所有文本
  5. 将其粘贴到记事本中并另存为 UTF-8。

在您编写任何代码来进行转换或下载任何可以为您进行转换的程序之前,您就已经完成了。

当然,我不能百分百确定这会起作用,而且您的浏览器需要正确的字体和所有内容,但考虑到您正在使用这些类型的文件,我假设您已经拥有这些文件。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      而且,现在 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())
      

      【讨论】:

        猜你喜欢
        • 2017-04-23
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        相关资源
        最近更新 更多