如何在Windows中使用Python打印ê和其他ASCII中可用的特殊字符
如何在Windows中使用Python打印ê和其他ASCII中可用的特殊字符
我想在Windows的Python中打印一个ê。当我在DOS提示符下时,我可以按alt+136来得到一个ê,但是当我尝试在Python for DOS中做这个操作时(使用代码页cp437或在chcp 1252到cp1252之后),我无法按alt+136来得到ê字符。为什么会这样呢?\nprint(chr(136))
在代码页cp437下正确地打印出ê,但是我如何打开一个包含这些字符的unicode文件呢:\n
Sokalâ€, Lâ€vivsâ€ka Oblast†BucureÅŸti, Romania ง'⌣'
\n并且让它打印这些字符而不是下面的乱码:\n
>>> import codecs >>> f = codecs.open("unicode.txt", "r", "utf-8") >>> f.read() u"Sokal\xe2\u20ac\u2122, L\xe2\u20ac\u2122vivs\xe2\u20ac\u2122ka Oblast\xe2\u20ac\nBucure\xc5\u0178ti, Romania\n\xe0\xb8\u2021'\ xe2\u0152\xa3'\nThis text should be in \xe2\u20ac\u0153quotes\xe2\u20ac\\x9d.\nBroken text… it’s ?ubberi?c!"
\n或者更糟糕的是:\n
>>> f = codecs.open("unicode.txt", "r", "utf-8") >>> print(f.read()) Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\encodings\cp437.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to
\n下面的代码:\n
import codecs f = codecs.open("unicode.txt", "r", "utf-8") s = f.read() print(s.encode('utf8'))
\n输出:\n
Sokal├óΓé¼Γäó, L├óΓé¼Γäóvivs├óΓé¼Γäóka Oblast├óΓé¼ Bucure├à┼╕ti, Romania ├á┬╕ΓÇí'├ó┼Æ┬ú' This text should be in ├óΓé¼┼ôquotes├óΓé¼\x9d. Broken text… it’s ?ubberi?c!
\n而不是:\n
Sokalâ€, Lâ€vivsâ€ka Oblast†BucureÅŸti, Romania ง'⌣'
\n我正在使用:\n
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
\n有没有办法将Unicode字符串中的ê等字符替换为可打印的ascii版本,即chr(136)
?\n请注意,我的问题与如何基于原始的UTF-8 unicode创建一个新的非Unicode扩展ascii字符串有关,该字符串将非可打印字符更改为ascii代码页中的等效字符,或者如果有等效字符,则替换为?或类似的字符。
在Python中打印ê和其他ASCII中可用的特殊字符(How to print ê and other special characters available in ASCII in Python for Windows)这个问题出现的原因是,当你读取时,你将其从utf8解码,所以当你写入时,你需要对其进行编码(回到utf8或其他编解码器)。
为了解决这个问题,你可以使用codecs库中的open函数打开文本文件,并指定编码为utf-8。然后,将读取的内容进行编码,并使用print语句打印出来。
以下是解决该问题的示例代码:
import codecs f = codecs.open("unicode.txt", "r", "utf-8") s = f.read() print(s.encode('utf8'))
通过这段代码,你可以正确地打印出包含特殊字符的文本文件中的内容。这样做是因为在读取文件时,你使用了正确的编码解码内容,并在打印时使用了正确的编码。
在Windows系统中,有些特殊字符无法直接通过键盘输入。为了解决这个问题,可以使用特定的键盘快捷方式来输入特殊字符。例如,在Windows系统下,可以使用Alt+136来输入字符ê,使用Alt+234来输入字符ê(未经测试)。如果需要将特殊字符以ascii码的形式输出,可以使用encode()函数将其转换为对应的ascii码。
另一个常见的Unicode问题是在Python中打印Unicode字符到Windows控制台时,可能会出现UnicodeEncodeError异常。为了解决这个问题,可以参考stackoverflow上的解决方案。
另外,如果从文件中读取文本,可能会出现乱码的情况。为了解决这个问题,可以先将文件中的字节转换为Unicode字符,然后再进行打印或其他操作。
此外,Python的控制台在显示Unicode字符时,会使用sys.displayhook()函数来显示结果。它会调用repr()函数来显示Unicode字符串的文本表示形式。如果想要以ascii可打印字符的形式显示Unicode字符,可以使用repr()函数来实现。
如果需要在Windows控制台中输入或显示任意Unicode字符,可以考虑安装win-unicode-console包。
最后,需要注意的是,在Python 2中,使用chr()函数来打印字符是不正确的。因为chr()函数会返回一个字节字符串,而不是Unicode字符。相同的字节在不同的字符编码中可能表示不同的字符,所以在处理文本时应始终使用Unicode字符。可以使用unichr()函数来打印Unicode字符。