當前位置:首頁 » 編程語言 » pythonansiutf8

pythonansiutf8

發布時間: 2023-09-19 16:14:38

python在讀取中文文件,編碼是ANSI格式的,希望能夠將漢字一個一個輸出。所以想轉成UTF-8的。求解。

一般來說讀出來的字元串,所以要"我".decode("ascii").encode("utf-8")
如果還不行,就結合下面悶肢好這段代碼試試,編碼可以換螞鉛換,飢仿反正我最近就是這樣解決的
import sys
reload(sys)
sys.setdefaultencoding('utf8')

② 如何修改python文件的編碼格式

可以知道的是,文本文件的默認編碼並不是utf8。
我們打開一個文本文件,並點擊另存為
2
我們在新窗口的編碼一欄看到默認編碼是ANSI。先不管這個編碼是什麼編碼,但是通過下拉列表我們知道,這種編碼不是utf8。
END
編碼測試
1
對於Python裡面的中文顯示,我們常常使用utf8和gbk的編碼。對於這兩種編碼筆者就不介紹了,總之都是專門可以處理中文的編碼方式啦。
2
我們首先對文本文件測試了gbk解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用utf8解碼,程序出錯,拋出decodeError異常
3
同樣的,我們對Python腳本文件測試了utf8解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用gbk解碼,中文部分出現亂碼
4
測試說明,對於文本文件需要使用gbk解碼,而對於腳本文件需要utf8解碼,也就是說,文本文件是gbk編碼的,而腳本則是utf8

③ Python 字元集編碼 - UTF-8 編碼

Unicode 的編碼范圍為 0~0x10FFFF ,如此大的范圍,顯然沒辦法像 ASCII 編碼一樣使用一個位元組存儲。為此,Unicode 制定了各種儲存編碼的方式,如: UTF-8 、 UTF-16 和 UTF-32 ,這些存儲格式被稱為 Unicode 轉換格式 UTF 。

每種 Unicode 轉換格式都會把一個編碼存儲為一到多個編碼單元,如 UTF-8 的編碼單元為 8 位的位元組; UTF-16 的編碼單元為 16 位,即 2 個位元組; UTF-32 的編碼單元為 32 位,即 4 個位元組。

其中, UTF-8 是在互聯網上使用最廣泛的一種 Unicode 轉換格式,具有以下顯著的優勢。下面,我們就先來看看 UTF-8 具有哪些有點吧~

1. UTF-8 中每個 ASCII 字元只需要一個位元組去存儲,因此一個 ASCII 文本本身也是一個 UTF-8 文本,即做到了向後兼容。

比如 A 的 ASCII 碼對應為 0x41 , a 的 ASCII 碼對應為 0x61 ,那麼 UTF-8 兼容 ASCII 也就意味著:

這里,需要再次提醒一下:Unicode 是表現形式,UTF-8 是存儲形式;即 UTF-8 解碼之後為 Unicode ,Unicode 可以編碼成 UTF-8 。

2. UTF-8 採用位元組為存儲單元,因此不存在位元組的大端和小段的問題。

UTF-16 和 UTF-32 的存儲單元分別是 2 位元組和 4 位元組,因此在存儲時會涉及到大小端的問題。那什麼是大小端模式呢?下面我們來暫停補充一下~

關於如何獲知你的環境使用的是大端模式還是小端模式,這里有個簡單的方式:定義一個 short 類型的數組即可:

數字 1 在 short 類型中表示為 0x0001 ,高位為 0x00 ,低位為 0x01 。我們可以很直觀地看到,數組在保存數據時,將高位 0x00 放在了高地址處,將低位 0x01 放在了低地址處。因此使用的就是小端模式。

那 UTF-8 為什麼可以使用位元組來作為存儲單元,而不用擔心位元組序的問題呢?這就涉及到了 UTF-8 巧妙的編碼規則~

UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用 1~4 個位元組表示一個符號,根據不同的符號而變化位元組長度。UTF-8的編碼規則很簡單,只有二條:

1)對於單位元組符號,位元組的第一位設為 0 ,後 7 位為這個符號的 Unicode 碼。也就是我們上文提到的向後兼容:對於英文字母,UTF-8 編碼和 ASCII 碼是相同的。

2)對於使用 X 個位元組存儲的符號,第一個位元組的前 X 位設置為 1 ,第 X+1 位設置為 0 ,後面位元組的前 2 位一律設置為 10 ,剩下的位置一次填充這個符號的 Unicode 碼。

下表總結了編碼規則,字母 x 表示可用於編碼的位:

跟據上表,解讀 UTF-8 編碼也非常簡單:如果一個位元組的第一位是 0 ,則這個位元組單獨就是一個字元;如果第一位是 1 ,則連續有多少個 1 ,就表示當前字元佔用多少個位元組。

下面,我們就來演示一下 UTF-8 編碼的過程。

首先,獲取漢字 魚 的 Unicode 碼:

我們不妨先對 魚 這個漢字使用 utf-8 編碼看看使用幾個位元組存儲:

魚 在 UTF-8 編碼中使用 3 個位元組存儲,因此其存儲的二進制的形式為 1110xxxx 10xxxxxx 10xxxxxx ,將 Unicode 1001 110001 111100 依次填充到佔位符 x 的位置就得到: 11101001 10110001 10111100 。

下面,我們將上述推導得出的 11101001 10110001 10111100 轉換為十六進制,驗證一下是否為 b'xe9xb1xbc' :

驗證無誤!

④ 怎麼在Python里使用UTF-8編碼

概述

在python代碼即.py文件的頭部聲明即可

解析

py文件中的編碼

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用"編碼指示"來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-

#coding=utf-8

# 以上兩種選其一即可

其他的編碼如:gbk、gb2312也可以;否則會出現:

SyntaxError: Non-ASCII character 'xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

python中的編碼與解碼

先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode,他們都是basestring的派生類;

str類型是一個包含Characters represent (at least) 8-bit bytes的序列;

unicode 的每個 unit 是一個 unicode obj;

在str的文檔中有這樣的一句話:

    The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.

也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

拓展內容

utf-8編碼

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,也是一種前綴碼。它可以用來表示Unicode標准中的任何字元,且其編碼中的第一個位元組仍與ASCII兼容,這使得原來處理ASCII字元的軟體無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。

UTF-8使用一至六個位元組為每個字元編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規范,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個位元組):

1、128個US-ASCII字元只需一個位元組編碼(Unicode范圍由U+0000至U+007F)。

2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個位元組編碼(Unicode范圍由U+0080至U+07FF)。

3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個位元組編碼(Unicode范圍由U+0800至U+FFFF)。

4、其他極少使用的Unicode輔助平面的字元使用四至六位元組編碼(Unicode范圍由U+10000至U+1FFFFF使用四位元組,Unicode范圍由U+200000至U+3FFFFFF使用五位元組,Unicode范圍由U+4000000至U+7FFFFFFF使用六位元組)。

對上述提及的第四種字元而言,UTF-8使用四至六個位元組來編碼似乎太耗費資源了。但UTF-8對所有常用的字元都可以用三個位元組表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字元同樣需要四個位元組來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布范圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮演算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標准壓縮格式(SCSU)。

互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟體都支持UTF-8編碼。

⑤ python怎麼中文寫txt文件

本文以txt 文本為例,只是介紹ANSI,Unicode,UTF-8 三種編碼的文件的讀寫過程,對於編碼不做深究了

一、用記事本另存為時,可以選擇保存文本使用的的幾種編碼模式,分別為:

  • ANSI:默認保存的編碼格式,採用本地操作系統默認的內碼,簡體中文一般為GB2312。

  • Unicode:UTF-16的小端位元組序,加上BOM簽名:0xFFFE。

  • Unicode bigendian:Unicode編碼:UTF-16的大端位元組序,加上BOM簽名:0xFEFF。

  • UTF-8:編碼格式是:UTF-8,其BOM為0xEF BB BF(UTF-8不區分位元組序,這個BOM僅標志UTF-8編碼)

  • Python對於讀取的txt文件,最好在讀取的時候進行decode成unicode編碼,

  • def read_out(self): with codecs.open(self.filename, 'r+') as get: return get.read().decode('gbk')


  • 然後再寫入的時候進行encode成對應想要的編碼類型,這樣可以保證源文件的編碼方式不會改變,且中文不會亂碼

    整個代碼過程保持使用unicode編碼方式利用try…except 來進行編碼判別具體使用了那種編碼方式

  • f.write(self.filename.encode('gbk'))

  • 二、對於raw_input 通過鍵盤輸入的文字,通過sys模塊中的stdin.encodeing來進行解碼

  • content = raw_input().decode(sys.stdin.encoding)

  • type(content) 是unicode
  • 暫時這么多

熱點內容
map訪問 發布:2025-02-02 06:09:07 瀏覽:822
android獲取應用版本 發布:2025-02-02 05:54:19 瀏覽:746
pythonif比較 發布:2025-02-02 05:24:03 瀏覽:259
已連接的無線網如何知道密碼 發布:2025-02-02 04:53:51 瀏覽:634
android編程入門經典pdf 發布:2025-02-02 04:46:19 瀏覽:57
安卓什麼軟體測試手機電池 發布:2025-02-02 04:28:52 瀏覽:996
手機上傳快 發布:2025-02-02 04:27:46 瀏覽:308
電腦配置詳解圖解都有哪些 發布:2025-02-02 04:26:27 瀏覽:716
景區應該有什麼配置 發布:2025-02-02 04:09:08 瀏覽:120
c語言與java工作 發布:2025-02-02 03:59:57 瀏覽:283