Конвертировать GB2312 в UTF-8
У меня есть текстовый файл, содержащий локализованные языковые строки, который в настоящее время закодирован в GB2312 (упрощенный китайский), но все остальные мои языковые файлы находятся в UTF-8. Мне очень трудно работать с этим файлом, так как ни один из моих текстовых редакторов не будет работать с ним должным образом и будет постоянно портить его. Есть ли инструменты для преобразования этого в UTF-8, и есть ли недостатки в этом? Будет ли лучше просто сохранить его как GB2312 и использовать другой редактор (если так, можете ли вы порекомендовать его)?
Обновление: я использую Windows XP (установка на английском языке).
Обновление № 2: я пытался использовать Notepad++ и Notepad2 для редактирования файлов GB2312, но оба не могут прочитать файлы и повредить их.
5 ответов
Вы можете попробовать этот онлайн-сервис, который использует Open Source iconv
полезность.
Вы также можете установить 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
Я мог бы подумать, что здесь все слишком просто, но если это всего лишь один простой текстовый файл, вы можете попробовать следующее:
- Заменить все
&
от&
, все<
от<
и все>
от>
(чтобы быть на безопасной стороне) Добавьте следующее к текстовому файлу:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><pre>
Откройте файл в вашем любимом браузере
- Выделите и скопируйте весь текст
- Вставьте его в Блокнот и сохраните как UTF-8.
С этим можно покончить, прежде чем вы сможете написать какой-либо код для преобразования или загрузить любые программы, которые будут выполнять преобразование для вас.
Конечно, я не уверен на сто процентов, что это сработает, и вашему браузеру понадобятся правильные шрифты и все такое, но, учитывая, что вы работаете с такими файлами, я предполагаю, что они у вас уже есть.
Если в вашей ОС есть инструмент командной строки, вы можете добиться этого, запустив однострочный скрипт:
# From GB18030
iconv -f gb18030 -t utf8 -o output.txt input.txt
# From GB2313
iconv -f gb2313 -t utf8 -o output.txt input.txt
Проверьте, есть ли в вашей ОСiconv
:
$ iconv --version
iconv (Debian GLIBC 2.31-13+deb11u3) 2.31
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Ulrich Drepper.
GB 2312 в основном совместим с GB 18030, поэтому любой инструмент, способный справиться с последним, должен также правильно обрабатывать GB 2312. Существует много инструментов для преобразования GB 18030 в UTF-8 (или какую-либо другую форму кодирования Unicode), но я не могу рекомендовать какой-либо конкретный для Windows, потому что я работаю в Unix. Если вы хотите написать немного кода, библиотеку iconv или ICU, вы можете вспомнить: вы найдете все данные о конверсии, легко доступные в этих библиотеках.
Переход с GB 2312 на UTF-8 абсолютно безопасен и без потерь, вам не стоит об этом беспокоиться.
Я согласен с текущим выбранным ответом в том, что «обнаружил, что это было действительно просто решить с программной точки зрения», особенно когда ваш исходный файл содержит конфиденциальную информацию, которую вы не хотите раскрывать неизвестному стороннему онлайн-сервису.
И в настоящее время Python доступен из коробки в большинстве сред Linux, а также легко устанавливается в среде Windows (проще, чем установка стека C#, ИМХО). Итак, без лишних слов, это двухстрочный скрипт Python, который может конвертировать GB2312 в UTF8. Я проверил это, это работает.
# 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())