Конвертировать GB2312 в UTF-8 - PullRequest
7 голосов
/ 18 декабря 2008

У меня есть текстовый файл, содержащий локализованные языковые строки, который в настоящее время кодируется в GB2312 (упрощенный китайский), но все остальные мои языковые файлы находятся в UTF-8. Мне очень трудно работать с этим файлом, поскольку ни один из моих текстовых редакторов не будет работать с ним должным образом и будет постоянно портить его. Есть ли инструменты для преобразования этого в UTF-8, и есть ли недостатки в этом? Было бы лучше оставить его как GB2312 и использовать другой редактор (если так, можете ли вы порекомендовать его)?

Обновление: Я использую Windows XP (установка на английском языке).

Обновление № 2: Я пытался использовать Notepad ++ и Notepad2 для редактирования файлов GB2312, но оба не могут прочитать файлы и повредить их.

Ответы [ 3 ]

7 голосов
/ 19 декабря 2008

Вы можете попробовать этот онлайн-сервис , который использует утилиту Open Source iconv.
Вы также можете установить на свой компьютер Charco , версию командной строки.

Для GB2312 вы можете использовать CP936 в качестве кодировки.

Если вы являетесь разработчиком .Net, вы можете создать небольшой инструмент, который сделает именно это.
Я также боролся с этим и обнаружил, что на самом деле это было просто решить с программной точки зрения.

Все, что вам нужно, это что-то вроде этого (я проверил, и это работает):

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

В 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
3 голосов
/ 19 декабря 2008

Я мог бы подумать, что здесь слишком просто, но если это всего лишь один простой текстовый файл, вы можете попробовать следующее:

  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.

С этим можно покончить, прежде чем вы могли бы написать какой-либо код для преобразования или загрузить любые программы, которые могли бы выполнить преобразование для вас.

Конечно, я не уверен на сто процентов, что это сработает, и вашему браузеру понадобятся правильные шрифты и все такое, но, учитывая, что вы работаете с такими файлами, я предполагаю, что они у вас уже есть.

2 голосов
/ 19 декабря 2008

GB 2312 в основном совместим с GB 18030, поэтому любой инструмент, способный справиться с последним, должен также правильно обращаться с GB 2312. Существует много инструментов для преобразования GB 18030 в UTF-8 (или какую-либо другую форму кодирования Unicode), но я не могу рекомендовать какой-либо конкретный для Windows, потому что я работаю на Unix. Если вы хотите написать немного кода, библиотека iconv, или ICU , приходит на ум: вы найдете все данные о преобразовании, легко доступные в этих библиотеках.

Преобразование из GB 2312 в UTF-8 абсолютно безопасно и без потерь, вам не стоит об этом беспокоиться.

...