如何在Windows中使用Python打印ê和其他ASCII中可用的特殊字符

28 浏览
0 Comments

如何在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代码页中的等效字符,或者如果有等效字符,则替换为?或类似的字符。

0
0 Comments

在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'))

通过这段代码,你可以正确地打印出包含特殊字符的文本文件中的内容。这样做是因为在读取文件时,你使用了正确的编码解码内容,并在打印时使用了正确的编码。

0
0 Comments

在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字符。

0