Python Unicode 转换为日语字符

3

我正在尝试使用Python将u'\u30c9\u30e9\u30b4\u30f3'转换为日语字符。

以下是我的示例代码:

s = u'\u30c9\u30e9\u30b4\u30f3'.encode('utf-8')
print str(s)
我遇到了这个错误 UnicodeEncodeError: 'ascii'编解码器无法对第0-3个位置的字符进行编码:该值不在128的范围内。

哪一行出错了?我似乎无法重现它。 - Neil
追溯(最近的调用在最后): 文件“c:/api/test.py”,第2行,在<module>中 print(s.decode('utf-8')) 文件“C:\ Python27 \ lib \ encodings \ cp437.py”,第12行,在encode中 返回codecs.charmap_encode(输入,错误,encoding_map) UnicodeEncodeError:'charmap'编解码器无法对位置0-3的字符进行编码:字符映射到<undefined> - Min Min
1
https://dev59.com/KXVD5IYBdhLWcg3wWaVh - Argus Malware
这是我的测试代码,但仍然出现错误UnicodeEncodeError: 'charmap'编解码器无法对位置0-3的字符进行编码:字符映射到<undefined>。 import sys, codecs, locale print sys.stdout.encoding sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout) print sys.stdout line = u'\u30c9\u30e9\u30b4\u30f3' print type(line), len(line) sys.stdout.write(line) print line - Min Min
1
请不要在评论区发布错误消息或多行代码片段。那很难阅读。请编辑您的问题并将它们放在那里,格式正确。 - Tomalak
被注释的代码(应该在问题中进行编辑)与问题中的代码完全不同。问题代码也没有产生所声称的错误。请参见[ask]和如何创建[mcve]。 - Mark Tolonen
3个回答

3
这将取决于您的操作系统和配置,但通常情况下,您只需打印Unicode字符串。如果您的操作系统、默认终端编码和字体支持日语,则只需要:
>>> s = u'\u30c9\u30e9\u30b4\u30f3'
>>> print s
ドラゴン

在Linux上,这需要您的终端正确配置为(通常)UTF-8。

在Windows上,您需要一个支持UTF-8的IDE,但如果使用Windows控制台,则会出现UnicodeEncodeError,除非使用支持日语的本地化版本的Windows,或者更改系统区域设置为日语。另一个解决方法是使用win-unicode-console和安装日语控制台字体。

我上面的示例使用了随pywin32模块一起提供的PythonWin IDE,并且在附带标准Python安装的Python IDLE IDE中也可以使用。


2

我在Windows 10上的REPL中使用日语字符时遇到了UnicodeEncodeError错误。

我按照Mark Tolonen的建议,前往

更改系统区域设置

在区域设置中。有一个选项说

测试版:使用 Unicode UTF-8 支持全球语言。

我勾选了这个选项,并保持当前系统区域设置为英语(即不变)。
重新启动后,REPL开始正确地打印日语字符。


0

您获得的是以字节为单位的 s。要获取日语字符,请使用 print(s.decode('utf-8'))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,