我正在制作一个程序,使用该replace()
函数将特定的日文字符从外部文本文件翻译成英文拼写,但我遇到了一个奇怪的错误。
我确保对文本文件中的所有字符进行编码,然后将其放入变量中,然后在该变量上以字节级别启动替换过程,然后再次将其解码为字符串,然后写入新的文本文件.
path = input('Location: ').strip('"')
txt = ''
with open(path,'rb') as f:
txt = f.read()
def convert(jchar,echar):
ct = txt.replace(jchar.encode('utf-8'),echar.encode('utf-8'))
return ct
txt = convert('ぁ','a')
txt = convert('っ','su')
with open('Translated.txt','w') as tf:
tf.write(txt.decode('utf-8'))
input('Done.')
如果文本文件包含脚本中可替换的所有日文字符,则一切正常,但如果文本文件包含脚本中不可替换的日文字符,则会出现此错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\u306e' in position 6: character maps to <undefined>
这样一来,python 在编码后似乎无法再次解码日语字符的字节。
最糟糕的是,甚至还有一些其他非 Unicode 字符,即使我在 python 脚本上将其替换为可替换,我仍然会得到相同的错误,这意味着 python 甚至无法对其进行编码,但我现在主要关注的是为什么 python拒绝解码日语字符的字节,尽管它自己的 python 能够对其进行编码。