Unicode 将GB2312转换为UTF-8

Unicode 将GB2312转换为UTF-8,unicode,utf-8,gb2312,Unicode,Utf 8,Gb2312,我有一个包含本地化语言字符串的文本文件,该字符串目前用GB2312简体中文编码,但我的所有其他语言文件都用UTF-8编码。我发现处理这个文件非常困难,因为我的任何文本编辑器都无法正确处理它并不断破坏它。是否有任何工具可以将其转换为UTF-8,这样做是否有任何缺点?是否最好将其保留为GB2312并使用不同的编辑器?如果是,您能推荐一个吗 更新:我正在使用Windows XP英语安装 更新2:我曾尝试使用记事本++和记事本2编辑GB2312文件,但两者都无法读取文件并将其损坏。GB2312与GB18

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

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


更新2:我曾尝试使用记事本++和记事本2编辑GB2312文件,但两者都无法读取文件并将其损坏。

GB2312与GB18030基本兼容,因此任何能够处理后者的工具都应该正确处理GB2312。有很多工具可以将GB 18030转换为UTF-8或其他Unicode编码形式,但我不能推荐任何适用于Windows的特定工具,因为我在Unix上工作。如果你想写一点代码,你会想到iconv库,或者:你会发现所有的转换数据都可以在这些库中找到


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

我可能觉得这里有点太简单了,但如果只是这一个纯文本文件,您可以尝试以下操作:

用&;,替换所有&;,为了安全起见 在文本文件前添加以下内容:

在您喜爱的浏览器中打开该文件

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

当然,我不是百分之百确定这会起作用,而且你的浏览器需要正确的字体和所有东西,但是考虑到你正在处理这些类型的文件,我假设你已经有了这些文件。

你可以尝试使用开源iconv实用工具。 您还可以在计算机上安装它的命令行版本

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

如果你是一个.Net开发人员,你可以制作一个小型工具来实现这一点。 我也在努力解决这个问题,发现从编程的角度来看,解决这个问题其实很简单

你所需要的就是这样的东西我测试了它,它可以工作:

在C中

在VB.Net中


我同意目前选择的答案,即从编程的角度来看,这实际上很容易解决,特别是当源文件包含您不想向未知的第三方在线服务公开的敏感信息时

而且,现在Python在大多数Linux环境中都是开箱即用的,而且在Windows环境中安装也比安装C stack、IMHO更容易。因此,无需进一步的ado,这是可以将GB2312转换为UTF8的两行Python脚本。我测试了它,它工作了

用法:python this_script.py your_input.txt your_output.txt 输入io,系统 io.opensys.argv[2],w,encoding=utf-8.writeio.opensys.argv[1],encoding=gb2312.read
哪种环境?窗户?Linux?很抱歉,它是用Windows XP英语安装的。您可以尝试编写一个快速/小型java实用程序,将文件读入字符串GB2312,然后将其写回UTF-8。那应该行。你怎么知道GB2312映射到CP936?我在哪里可以找到一个表,它将每个字符集与相应的代码页相关联,以支持任何语言?
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();
    }
}
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