Displaying posts tagged with

“unicode”

Python食谱-1.23.Unicode数据编码输出到XML或HTML文件

原文作者:David Goodger, Peter Cogolo 中文翻译:Tony (digitalsatori) 问题 要将Uicode文本输出到HTML或是XML应用程序,且只能用较为流行但受限的编码比如:ASCII码,或Latin-1,如何操作? 解决方法 Python 有一个叫 xmlcharrefreplace 的编码出错处理器,它可以将选定编码之外的字符替换为XML数字字符参考(XML numeric characters references): def encode_for_xml(unicode_data, encoding='ascii'): return unicode_data.encode(encoding, 'xmlcharrefreplace') 上述的方法也可以用来处理HTML输出,但是我们希望能用HTML的‘符号实体‘(symbolic entity)。这样的话,我们就要自己定义一个函数并将其注册为编码错误处理函数。弄这么个函数其实并不难,因为Python标准库中已经有一个叫 htmlentitydefs 的模块,其包含了所有的HTML的实体定义。 import codecs from htmlentitydefs import codepoint2name def html_replace(exc): if isinstance(exc, (UnicodeEncodeError, UnicodeTranslateError)): s = [ u'&%s;' % codepoint2name[ord(c)] for c in exc.object[exc.start:exc.end] ] return ''.join(s), exc.end else: raise TypeError("can't [...]

Python食谱-1.22.将Unicode字符打印到标准输出

原文作者:David Ascher 中文翻译:Tony (digitalsatori) 问题 需要将Unicode字符打印到标准输出(比如在Debug时),但是它们不能使用默认的编码,怎么办? 解决方法 使用Python标准库中的 codecs 模块作为编码转换器来封装 sys.stdout (标准输出流)。比如我们的输出是到一个使用ISO-8859-1编码的终端,可以这样来写代码: import codecs, sys sys.stdout = codecs.lookup('iso8859-1')[-1](sys.stdout) 讨论 Unicode字符串处在一个足以容纳全世界所有语言所包含的字符的空间中。幸运的是,作为Unicode的使用者,我们不必了解Unicode字符串的内部表现方式。但是对于象 sys.stdout 这样的文件流,只能处理与特定编码关联的字节。我们可以改变Python的 site 模块来改变文件所使用的默认编码,但是这样的改变会全局影响Python ,使其它使用Python安装时的默认编码的程序出现混乱。(Python的默认标准编码是ASCII)。因此,我们不推荐这类改动。 本配方采用了一个更好的方法:将 sys.stdout 重新绑定到一个接收Unicode输入,以ISO-8859-1(也称为"Latin-1")编码输出的文件流。该方法并不会改变之前的 sys.stdout 的编码。首先我们保存当前的以ASCII为编码的 sys.stdout: >>> old = sys.stdout 然后,我们创建一个无法通过 sys.stdout 直接输出的Unicode字符串: >>> char = u"\N{LATIN SMALL LETTER A WITH DIAERESIS}" >>> print char Traceback (most recent call last): [...]