将不良文本转换为韩语
Converting Bad Text to Korean
问题
我正在清理一些旧的韩语代码,有些部分以前是韩语的代码我想翻译成英语。但是,似乎存在编码问题,文本不再是韩文。相反,它是乱码。
我想从断弦到英文翻译。
我的计划是从损坏的字符串开始,使用在我的计算机上用于解码损坏的字符串的编解码器将其编码为二进制,然后使用韩语编解码器将该二进制文件解码为韩语,然后 google把那个韩文翻译成英文。 问题是我不知道如何将这些乱码解码成可读的韩语。
我试过的
我开始编写一些 Python3 代码来翻译它,但我一直遇到编码错误,老实说,我不知道从哪里开始。这段代码是在假设韩国人使用 cp949
编解码器的情况下编写的,我不确定。
fileIn = open('Broken_Korean.txt', 'r', encoding='cp949')
fileOut = open('Fixed_Korean.txt', 'w')
Lines = fileIn.readlines()
for line in Lines:
fileOut.write(str(line.encode('cp949')))
fileOut.write('\n')
fileOut.write(line.encode('cp949').decode('utf-8'))
我也研究过这个问题,但我没有发现任何突破性的东西。我相信用于显示损坏的字符串的编解码器是 UTF-8,但我可能弄错了。我不知道原来的韩文是怎么写的,只知道它是用“多字节编码方案(MBCS)”写的。对于上下文,这个程序是用LabVIEW 2015编写的。据推测,他们在编写初始代码时使用的是韩语版本。
一些断弦的例子:
ÆÄÀÏ ´ëÈ »óÀÚ5
ÆÄÀÏ ´ëÈ »óÀÚ6
ÆÄÀÏ ´ëÈ »óÀÚ
幸运的是,一些编码错误发生在枚举上,所以我能够找到英文翻译。使用该翻译,我可以猜出古兰经可能是什么,但我不确定。我认为这可能会帮助我推断出使用的编解码器,但我不知道该怎么做。
À¯ÇÑ »ùÇÃ
= 有限样本 > 유한 샘플
¿¬¼Ó »ùÇÃ
= 连续采样 > 연속 샘플
Çϵå¿þ¾î ŸÀֿ̹¡ ÀÇÇÑ ´ÜÀÏ Æ÷ÀÎÆ®
= 硬件定时单点 > 하드웨어 타이밍 단일 포인트
任何有关编码工作的帮助或有关如何解决此问题的提示,我们将不胜感激!我现在很迷茫。
编辑:
这是一些损坏的字符串的十六进制转储:
Broken_Korean.txt
ÆÄÀÏ ´ëÈ »óÀÚ5
ÆÄÀÏ ´ëÈ »óÀÚ6
ÆÄÀÏ ´ëÈ »óÀÚ
À¯ÇÑ »ùÇÃ
¿¬¼Ó »ùÇÃ
Çϵå¿þ¾î ŸÀֿ̹¡ ÀÇÇÑ ´ÜÀÏ Æ÷ÀÎÆ®
hexdump -C Broken_Korean.txt
000000 c3 86 c3 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ........ .......
000010 ad 20 c2 bb c3 b3 c3 80 c3 9a 35 0d 0a c3 86 c3 . ........5.....
000020 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 ..... ........ .
000030 bb c3 b3 c3 80 c3 9a 36 0d 0a c3 86 c3 84 c3 80 .......6........
000040 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 bb c3 b3 .. ........ ....
000050 c3 80 c3 9a 0d 0a c3 80 c2 af c3 87 c3 91 20 c2 .............. .
000060 bb c3 b9 c3 87 c3 83 0d 0a c2 bf c2 ac c2 bc c3 ................
000070 93 20 c2 bb c3 b9 c3 87 c3 83 0d 0a c3 87 c3 8f . ..............
000080 c2 b5 c3 a5 c2 bf c3 be c2 be c3 ae 20 c3 85 c2 ............ ...
000090 b8 c3 80 c3 8c c2 b9 c3 96 c2 bf c2 a1 20 c3 80 ............. ..
0000a0 c3 87 c3 87 c3 91 20 c2 b4 c3 9c c3 80 c3 8f 20 ...... ........
0000b0 c3 86 c3 b7 c3 80 c3 8e c3 86 c2 ae ............
hexdump 中的数据可能被读取为 ISO-8859-1 (a.k.a Latin-1
) 并重新保存为 UTF-8。要反转,解码为 UTF-8 以获得原始 cp939
字节值,但在 Unicode 字符串中作为 Unicode 代码点。 latin1
编解码器占用前 256 个代码点,用它编码给出具有相同字节值的字节串。然后可以应用正确的编解码器解码回 Unicode 字符串:
data = bytes.fromhex('''
c3 86 c3 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2
ad 20 c2 bb c3 b3 c3 80 c3 9a 35 0d 0a c3 86 c3
84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2
bb c3 b3 c3 80 c3 9a 36 0d 0a c3 86 c3 84 c3 80
c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 bb c3 b3
c3 80 c3 9a 0d 0a c3 80 c2 af c3 87 c3 91 20 c2
bb c3 b9 c3 87 c3 83 0d 0a c2 bf c2 ac c2 bc c3
93 20 c2 bb c3 b9 c3 87 c3 83 0d 0a c3 87 c3 8f
c2 b5 c3 a5 c2 bf c3 be c2 be c3 ae 20 c3 85 c2
b8 c3 80 c3 8c c2 b9 c3 96 c2 bf c2 a1 20 c3 80
c3 87 c3 87 c3 91 20 c2 b4 c3 9c c3 80 c3 8f 20
c3 86 c3 b7 c3 80 c3 8e c3 86 c2 ae
''')
fixed = data.decode('utf8').encode('latin1').decode('cp949')
print(fixed)
输出:
파일 대화 상자5
파일 대화 상자6
파일 대화 상자
유한 샘플
연속 샘플
하드웨어 타이밍에 의한 단일 포인트
翻译(Google 翻译):
File Dialog 5
File Dialog 6
File dialog
Finite sample
Continuous sample
Single point by hardware timing
如果从文件开始,将文件读取为 UTF-8,应用修复,然后将其写回(正确的)UTF-8:
with open('Broken_Korean.txt', 'r', encoding='utf8') as f:
data = f.read().encode('latin1').decode('cp949')
with open('Fixed_Korean.txt', 'w', encoding='utf8') as f:
f.write(data)
问题
我正在清理一些旧的韩语代码,有些部分以前是韩语的代码我想翻译成英语。但是,似乎存在编码问题,文本不再是韩文。相反,它是乱码。
我想从断弦到英文翻译。
我的计划是从损坏的字符串开始,使用在我的计算机上用于解码损坏的字符串的编解码器将其编码为二进制,然后使用韩语编解码器将该二进制文件解码为韩语,然后 google把那个韩文翻译成英文。 问题是我不知道如何将这些乱码解码成可读的韩语。
我试过的
我开始编写一些 Python3 代码来翻译它,但我一直遇到编码错误,老实说,我不知道从哪里开始。这段代码是在假设韩国人使用 cp949
编解码器的情况下编写的,我不确定。
fileIn = open('Broken_Korean.txt', 'r', encoding='cp949')
fileOut = open('Fixed_Korean.txt', 'w')
Lines = fileIn.readlines()
for line in Lines:
fileOut.write(str(line.encode('cp949')))
fileOut.write('\n')
fileOut.write(line.encode('cp949').decode('utf-8'))
我也研究过这个问题,但我没有发现任何突破性的东西。我相信用于显示损坏的字符串的编解码器是 UTF-8,但我可能弄错了。我不知道原来的韩文是怎么写的,只知道它是用“多字节编码方案(MBCS)”写的。对于上下文,这个程序是用LabVIEW 2015编写的。据推测,他们在编写初始代码时使用的是韩语版本。
一些断弦的例子:
ÆÄÀÏ ´ëÈ »óÀÚ5
ÆÄÀÏ ´ëÈ »óÀÚ6
ÆÄÀÏ ´ëÈ »óÀÚ
幸运的是,一些编码错误发生在枚举上,所以我能够找到英文翻译。使用该翻译,我可以猜出古兰经可能是什么,但我不确定。我认为这可能会帮助我推断出使用的编解码器,但我不知道该怎么做。
À¯ÇÑ »ùÇÃ
= 有限样本 > 유한 샘플
¿¬¼Ó »ùÇÃ
= 连续采样 > 연속 샘플
Çϵå¿þ¾î ŸÀֿ̹¡ ÀÇÇÑ ´ÜÀÏ Æ÷ÀÎÆ®
= 硬件定时单点 > 하드웨어 타이밍 단일 포인트
任何有关编码工作的帮助或有关如何解决此问题的提示,我们将不胜感激!我现在很迷茫。
编辑: 这是一些损坏的字符串的十六进制转储:
Broken_Korean.txt
ÆÄÀÏ ´ëÈ »óÀÚ5
ÆÄÀÏ ´ëÈ »óÀÚ6
ÆÄÀÏ ´ëÈ »óÀÚ
À¯ÇÑ »ùÇÃ
¿¬¼Ó »ùÇÃ
Çϵå¿þ¾î ŸÀֿ̹¡ ÀÇÇÑ ´ÜÀÏ Æ÷ÀÎÆ®
hexdump -C Broken_Korean.txt
000000 c3 86 c3 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ........ .......
000010 ad 20 c2 bb c3 b3 c3 80 c3 9a 35 0d 0a c3 86 c3 . ........5.....
000020 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 ..... ........ .
000030 bb c3 b3 c3 80 c3 9a 36 0d 0a c3 86 c3 84 c3 80 .......6........
000040 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 bb c3 b3 .. ........ ....
000050 c3 80 c3 9a 0d 0a c3 80 c2 af c3 87 c3 91 20 c2 .............. .
000060 bb c3 b9 c3 87 c3 83 0d 0a c2 bf c2 ac c2 bc c3 ................
000070 93 20 c2 bb c3 b9 c3 87 c3 83 0d 0a c3 87 c3 8f . ..............
000080 c2 b5 c3 a5 c2 bf c3 be c2 be c3 ae 20 c3 85 c2 ............ ...
000090 b8 c3 80 c3 8c c2 b9 c3 96 c2 bf c2 a1 20 c3 80 ............. ..
0000a0 c3 87 c3 87 c3 91 20 c2 b4 c3 9c c3 80 c3 8f 20 ...... ........
0000b0 c3 86 c3 b7 c3 80 c3 8e c3 86 c2 ae ............
hexdump 中的数据可能被读取为 ISO-8859-1 (a.k.a Latin-1
) 并重新保存为 UTF-8。要反转,解码为 UTF-8 以获得原始 cp939
字节值,但在 Unicode 字符串中作为 Unicode 代码点。 latin1
编解码器占用前 256 个代码点,用它编码给出具有相同字节值的字节串。然后可以应用正确的编解码器解码回 Unicode 字符串:
data = bytes.fromhex('''
c3 86 c3 84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2
ad 20 c2 bb c3 b3 c3 80 c3 9a 35 0d 0a c3 86 c3
84 c3 80 c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2
bb c3 b3 c3 80 c3 9a 36 0d 0a c3 86 c3 84 c3 80
c3 8f 20 c2 b4 c3 ab c3 88 c2 ad 20 c2 bb c3 b3
c3 80 c3 9a 0d 0a c3 80 c2 af c3 87 c3 91 20 c2
bb c3 b9 c3 87 c3 83 0d 0a c2 bf c2 ac c2 bc c3
93 20 c2 bb c3 b9 c3 87 c3 83 0d 0a c3 87 c3 8f
c2 b5 c3 a5 c2 bf c3 be c2 be c3 ae 20 c3 85 c2
b8 c3 80 c3 8c c2 b9 c3 96 c2 bf c2 a1 20 c3 80
c3 87 c3 87 c3 91 20 c2 b4 c3 9c c3 80 c3 8f 20
c3 86 c3 b7 c3 80 c3 8e c3 86 c2 ae
''')
fixed = data.decode('utf8').encode('latin1').decode('cp949')
print(fixed)
输出:
파일 대화 상자5
파일 대화 상자6
파일 대화 상자
유한 샘플
연속 샘플
하드웨어 타이밍에 의한 단일 포인트
翻译(Google 翻译):
File Dialog 5
File Dialog 6
File dialog
Finite sample
Continuous sample
Single point by hardware timing
如果从文件开始,将文件读取为 UTF-8,应用修复,然后将其写回(正确的)UTF-8:
with open('Broken_Korean.txt', 'r', encoding='utf8') as f:
data = f.read().encode('latin1').decode('cp949')
with open('Fixed_Korean.txt', 'w', encoding='utf8') as f:
f.write(data)