擅长:python、mysql、java
<p><code>print [v]</code>调用<code>repr(v)</code>,按原样返回ascii可打印字符,其他所有内容使用<code>\x</code>,<code>\u</code>,<code>\U</code>。。。在</p>
<p>记住,像<code>dict(a=1)</code>这样的对象与其文本表示(<code>repr(dict(a=1))</code>)不同。Unicode字符串也是一个对象(<code>type(v) == unicode</code>),因此<code>repr(v) is not v</code>(顺便说一句,<code>repr(repr(v)) is not repr(v)</code>也要考虑一下)。在</p>
<p>要在Python控制台中显示供调试的可读文本,可以提供自定义的<code>sys.displayhook</code>,例如,可以使用<code>sys.stdout.encoding</code>对任何(嵌入的)<code>unicode</code>对象进行编码。在python3中,<code>repr(unicode_string)</code>返回当前环境中可打印的Unicode字符(将转义导致<code>UnicodeEncodeError</code>的字符)。在</p>
<p><code>str(v)</code>升高<code>UnicodeEncodeError</code>是无关的。<code>str(v)</code>调用<code>v.encode(sys.getdefaultencoding())</code>,因此对于任何带有非ascii字符的unicode字符串,它都失败。不要对Unicode字符串调用<code>str()</code>(这几乎总是一个错误),而是直接打印Unicode。在</p>