8

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

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

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

4

4 回答 4

7

您可以尝试使用开源实用程序的在线服务。 您还可以在您的机器上安装Charco,它的命令行版本。iconv

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

If you are a .Net developer you can make a small tool that does just that.
I've struggled with this as well and found that it was actually simple to solve from a programmatic point of view.

All you need is something like this (I tested it and it works):

In 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();
    }
}

In 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
于 2008-12-19T02:05:55.143 回答
4

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

  1. 替换 all &by &amp;, all <by &lt;and all >by &gt;(为了安全起见)
  2. 将以下内容添加到文本文件中:

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

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

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

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

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

于 2008-12-19T01:18:29.357 回答
2

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

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

于 2008-12-18T23:13:49.840 回答
0

I agree on the currently chosen answer in that "found that it was actually simple to solve from a programmatic point of view", especially when your source file contains sensitive information that you do not want to expose to an unknown 3rd-party online service.

And, nowadays Python is available out-of-box in most Linux environment, and also easy to install on a Windows environment (easier than installing C# stack, IMHO). So, without further ado, this is the 2-liner Python script that can convert GB2312 to UTF8. I tested it, it works.

# 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())
于 2021-01-08T05:53:11.017 回答