我读日语,想尝试处理一些日文文本.我尝试使用Python 3:
for i in range(1,65535):
print(chr(i), end='')
Run Code Online (Sandbox Code Playgroud)
然后Python给了我很多错误.什么地方出了错?
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Traceback (most recent call last):
File "C:\test\char.py", line 11, in <module>
print(chr(i), end='')
File "C:\Python31\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x80' in position 0: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)
我的理解是chr函数继续将Unicode数字转换为相应的日语字符.如果是这样,为什么不输出日文字符?为什么它会在罗马字符列表的末尾崩溃?
如果我错误地认为Unicode集是为了迎合非西方语言而设计的,那么请纠正我.
编辑:
我尝试了John Machin在IDLE中提出的3行,输出工作正常!
在此之前,我一直在使用程序员的记事本,工具设置为捕获python.exe编译器的输出.也许这就是错误发生的原因.
但是,对于大多数其他事情,输出被正确捕获; 那么为什么它在这个过程中特别失败?即为什么代码在IDLE Python Shell中工作,而不是通过Programmer的Notepad输出捕获?无论接口如何,输出都不应该相同吗?
我有一个文件名为"01 - ナナナン块.txt"的文件夹
我在与文件相同的文件夹中的交互式提示符处打开python并尝试遍历文件夹层次结构:
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for x in os.walk('.'):
... print(x)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\dev\Python31\lib\encodings\cp850.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 17-21: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)
很明显,我正在使用的编码无法处理日文字符.精细.但是根据我的理解,Python 3.1应该是unicode,所以我不知道我对此有何意义.有人有主意吗?
我想在Python中使用Tamil语言.但遇到了困难.这是我的代码
U=u'\u0B83'
print U
Run Code Online (Sandbox Code Playgroud)
这会抛出错误,
UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ u0b83'进行编码:序数不在范围内(128)
我在ascii中的违约行为.由于u0b83已经是unicode,它应该打印泰米尔语中的角色.
我也试过这个,# - - 编码:utf-8 - - .但结果是一样的.
如何在unicode中设置它?
我正在玩unicodepython.
所以有一个简单的脚本:
# -*- coding: cp1251 -*-
print '??????'.decode('cp1251')
print unicode('??????', 'cp1251')
print unicode('??????', 'utf-8')
Run Code Online (Sandbox Code Playgroud)
在cmd中我已将编码切换为Active code page: 1251.
还有输出:
????????????
????????????
??????
Run Code Online (Sandbox Code Playgroud)
我有点困惑.
由于我已经指定了编码,cp1251我希望它能被正确解码.
但结果是有一些垃圾代码点被解释.据我所知,这'??????'只是一个字节:
'\xd1\x8e\xd0\xbd\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb4'.
但有一种方法可以在终端中获得正确的输出cp1251?我应该手动构建字节字符串吗?
好像我误解了一些东西.
我正在开发一个使用utf-8编码的应用程序。出于调试目的,我需要打印文本。如果我print()直接使用包含我的 unicode 字符串的变量,例如 - print(pred_str).
我收到此错误:
UnicodeEncodeError: 'charmap' 编解码器无法在位置 0 编码字符 '\ufeff':字符映射到
所以我试了一下print(pred_str.encode('utf-8')) ,我的输出是这样的:
b'\xef\xbb\xbfpudgala-dharma-nair\xc4\x81tmyayo\xe1\xb8\xa5 apratipanna-vipratipann\xc4\x81n\xc4\x81m'
b'avipar\xc4\xabta-pudgala-dharma-nair\xc4\x81tmya-pratip\xc4\x81dana-artham'
b'tri\xe1\xb9\x83\xc5\x9bik\xc4\x81-vij\xc3\xb1apti-prakara\xe1\xb9\x87a-\xc4\x81rambha\xe1\xb8\xa5'
b'pudgala-dharma-nair\xc4\x81tmya-pratip\xc4\x81danam punar kle\xc5\x9ba-j\xc3\xb1eya-\xc4\x81vara\xe1\xb9\x87a-prah\xc4\x81\xe1\xb9\x87a-artham'
但是,我希望我的输出看起来像这样:
pudgala-dharma-nair?tmyayo? apratipanna-vipratipann?n?m
avipar?ta-pudgala-dharma-nair?tmya-pratip?dana-artham
tri??ik?-vijñapti-prakara?a-?rambha?
pudgala-dharma-nair?tmya-pratip?danam punar kle?a-jñeya-?vara?a-prah??a-artham
如果我使用以下方法将字符串保存在文件中:
with codecs.open('out.txt', 'w', 'UTF-8') as f:
f.write(pred_str)
Run Code Online (Sandbox Code Playgroud)
它按预期保存字符串。
python ×5
unicode ×4
encoding ×1
filesystems ×1
python-2.7 ×1
python-3.x ×1
tamil ×1
windows ×1