天天看點

關于 Python3 的編碼

<a href="https://s3.51cto.com/wyfs02/M00/9D/E1/wKiom1mIEXfReh9TAAA5ATqexB8639.png" target="_blank"></a>

2、漢字與 gbk 十六進制(二進制)之間的轉換。

<code># 漢字轉十六進制</code>

<code>&gt;&gt;&gt; </code><code>'你好'</code><code>.encode(</code><code>'gbk'</code><code>)</code>

<code>b</code><code>'\xc4\xe3\xba\xc3'</code>

<code># 十六進制轉漢字</code>

<code>&gt;&gt;&gt; b</code><code>'\xc4\xe3\xba\xc3'</code><code>.decode(</code><code>'gbk'</code><code>)</code>

<code>'你好'</code>

<code># 漢字轉十六進制字元串</code>

<code>&gt;&gt;&gt; '</code><code>'.join( [ '</code><code>%</code><code>02X</code><code>' % x for x in '</code><code>你好</code><code>'.encode('</code><code>gbk') ] ).strip()</code>

<code>'C4E3BAC3'</code>

<code>&gt;&gt;&gt; </code><code>' '</code><code>.join( [ </code><code>'%02X'</code> <code>%</code> <code>x </code><code>for</code> <code>x </code><code>in</code> <code>'你好'</code><code>.encode(</code><code>'gbk'</code><code>) ] ).strip()</code>

<code>'C4 E3 BA C3'</code>

<code># 十六進制字元串轉漢字</code>

<code>&gt;&gt;&gt; bytes.fromhex(</code><code>'C4E3BAC3'</code><code>).decode(</code><code>'gbk'</code><code>)</code>

<code>&gt;&gt;&gt; bytes.fromhex(</code><code>'C4 E3 BA C3'</code><code>).decode(</code><code>'gbk'</code><code>)</code>

3、漢字與 unicode 編碼之間的轉換。

<code>&gt;&gt;&gt; </code><code>'你好'</code><code>.encode(</code><code>'unicode_escape'</code><code>)</code>

<code>b</code><code>'\\u4f60\\u597d'</code>

<code>&gt;&gt;&gt; b</code><code>'\\u4f60\\u597d'</code><code>.decode((</code><code>'unicode_escape'</code><code>))</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(b</code><code>'\\u4f60\\u597d'</code><code>)</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(u</code><code>'\u4f60\u597d'</code><code>)</code>

<code>你好</code>

4、bytes 相關

<code># bytes 對象轉十六進制字元串</code>

<code>&gt;&gt;&gt; </code><code>"%02X"</code> <code>%</code> <code>ord</code><code>(b</code><code>'\xff'</code><code>)</code>

<code>'FF'</code>

<code># bytes 轉 int</code>

<code>&gt;&gt;&gt; </code><code>ord</code><code>(b</code><code>'\xff'</code><code>)</code>

<code>255</code>

<code># int 轉 bytes</code>

<code>&gt;&gt;&gt; bytes([</code><code>255</code><code>])</code>

<code>b</code><code>'\xff'</code>

5、關于utf8的bom頭。(Python3下)

<code>&gt;&gt;&gt; </code><code>import</code> <code>codecs</code>

<code>&gt;&gt;&gt; codecs.BOM_UTF8</code>

<code>b</code><code>'\xef\xbb\xbf'</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(b</code><code>'\xef\xbb\xbf'</code><code>)</code>

<code>3</code>

<code>&gt;&gt;&gt; codecs.BOM_UTF8.decode(</code><code>'utf8'</code><code>)</code>

<code>'\ufeff'</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(</code><code>'\ufeff'</code><code>)</code>

<code>1</code>

<code>&gt;&gt;&gt; </code><code>from</code> <code>encodings.aliases </code><code>import</code> <code>aliases</code>

<code>&gt;&gt;&gt; </code><code>for</code> <code>k </code><code>in</code> <code>aliases:</code>

<code>    </code><code>print</code><code>(</code><code>'%s: %s'</code> <code>%</code> <code>(k, aliases[k]))</code>

8、驗證是不是有效編碼。

<code>&gt;&gt;&gt; codecs.lookup(</code><code>'utf8'</code><code>)    </code><code>#有效</code>

<code>&lt;codecs.CodecInfo </code><code>object</code> <code>for</code> <code>encoding utf</code><code>-</code><code>8</code> <code>at </code><code>0x13fb4f50828</code><code>&gt;</code>

<code>&gt;&gt;&gt; codecs.lookup(</code><code>'utf-;8'</code><code>)    </code><code>#有效</code>

<code>&lt;codecs.CodecInfo </code><code>object</code> <code>for</code> <code>encoding utf</code><code>-</code><code>8</code> <code>at </code><code>0x13fb4f50a08</code><code>&gt;</code>

<code>&gt;&gt;&gt; codecs.lookup(</code><code>'utf88'</code><code>)    </code><code>#無效</code>

<code>Traceback (most recent call last):</code>

<code>  </code><code>File</code> <code>"&lt;pyshell#4&gt;"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code>&lt;module&gt;</code>

<code>    </code><code>codecs.lookup(</code><code>'utf88'</code><code>)</code>

<code>LookupError: unknown encoding: utf88</code>

9、标準化 encoding。

<code>&gt;&gt;&gt; </code><code>import</code> <code>encodings</code>

<code>&gt;&gt;&gt; encodings.normalize_encoding(</code><code>'utf-;8'</code><code>)</code>

<code>'utf_8'</code>

<code>import</code> <code>sys</code>

<code>import</code> <code>locale</code>

<code> </code> 

<code># 目前系統所使用的預設字元編碼</code>

<code>&gt;&gt;&gt; sys.getdefaultencoding()</code>

<code>'utf-8'</code>

<code># 用于轉換 Unicode 檔案名至系統檔案名所使用的編碼</code>

<code>&gt;&gt;&gt; sys.getfilesystemencoding()</code>

<code># 擷取預設的區域設定并傳回元組(語言, 編碼)</code>

<code>&gt;&gt;&gt; locale.getdefaultlocale()</code>

<code>(</code><code>'zh_CN'</code><code>, </code><code>'cp936'</code><code>)</code>

<code># 傳回使用者設定的文本資料編碼</code>

<code># 文檔提到this function only returns a guess</code>

<code>&gt;&gt;&gt; locale.getpreferredencoding()</code>

<code>'cp936'</code>

相關閱讀:

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1954215如需轉載請自行聯系原作者

RQSLT