作者jamesxxx1997 (黃~)
看板Python
標題[問題] 關於Python編碼的疑惑
時間Sat Sep 23 12:59:18 2017
各位大大好,在下是Python新手,想要確認一下我編碼的基礎概念有沒有問題
,所以舉了一個例子,想請各位看看我的想法是否有誤~
https://imgur.com/a/iDdl0,這張圖是我目前概念的整理
舉例如下 :
<文字編輯器Atom的編碼設定為'ascii',stdin.encoding == utf-8
,stdout.encoding == utf-8>
1.當我在文字編輯器上輸入字串時
,我的字串會被sys.stdin的編碼'utf-8'轉成unicode code point,然後sys.stdout
再將這些unicode code point編碼成位元組,再利用位元組在螢幕上渲染出字型
,而當我要存檔時,unicode code point會被'ascii'編碼系統轉成位元組並儲存在
記憶體中,當我要開啟檔案時,文字編輯器Atom就會把存在記憶體中的位元組以'ascii'
的方式解碼成unicode code point
2.Python內部是以unicode code point進行處理
3.(問題)
當我輸入字串'倀',時,sys.stdin就會把它encoding成unicode code point,但是
當我直接輸入倀的unicode code point '\u5000'時,sys.stdin會怎麼做呢?
以上三點就是我的問題,新手第一次發問,如果有不對的發問方式,請各位不吝指教
,謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.34.20
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1506142761.A.A97.html
1F:→ neil987: py2 ascii py3 utf-8 09/23 22:12
2F:→ jamesxxx1997: n大的意思是? 09/23 22:25
3F:推 neil987: 同樣的字串 在python 2.x跟3不一樣 09/23 23:17
4F:→ jamesxxx1997: 阿對吼,我忘了說我用Python3.6 09/23 23:34
5F:→ jamesxxx1997: 有人可以幫忙解惑嗎QQ 09/24 12:16
6F:→ neil987: 在py3裡面 你輸入'倀'跟輸入他的unicode一樣都是str 09/24 15:32
8F:→ jamesxxx1997: 恩...那n大,請問我三個問題中的第一個有哪裡錯嗎 09/24 16:26
9F:→ jamesxxx1997: 因為在我的觀念中,我輸入的東西是一堆bytes 09/24 16:28
10F:→ jamesxxx1997: 在stdin中,Python會把它轉成unicode code point 09/24 16:28
11F:→ jamesxxx1997: 所以我單純輸入一個字串,與輸入\uffff比較起來 09/24 16:30
12F:→ jamesxxx1997: \u因為有轉義字元\u,所以會讓stdin對字串'\u5000' 09/24 16:31
13F:→ jamesxxx1997: 做出與一般字串不同的encode方式? 09/24 16:32
14F:→ jamesxxx1997: 我畫個圖來解釋我的想法XDDDDD 09/24 16:35
16F:→ neil987: bytes 跟str這兩個是不同資料型態 09/24 16:58
17F:→ jamesxxx1997: rrr,我沒說這兩個是同一個型態阿 09/24 20:09
18F:→ jamesxxx1997: 我在鍵盤上輸入的東西其實是bytes,被stdin轉成unic 09/24 20:10
19F:→ jamesxxx1997: unicode code point 09/24 20:10
20F:→ jamesxxx1997: n大,很謝謝你的回覆,不過我的問題跟你的回答 09/24 20:13
21F:→ jamesxxx1997: 一樣XDDDDD 09/24 20:13
22F:→ s860134: 你把 stdin 導到檔案不就得了... 09/25 08:28
23F:→ s860134: 導到檔案不會騙你吧XD 09/25 08:28
24F:→ jamesxxx1997: 恩...s大,我真的是自己試過,爬文也爬過 09/25 23:07
25F:→ jamesxxx1997: stackoverflow也查過,但還是不懂,所以才來問 09/25 23:08
26F:→ jamesxxx1997: 自己嘗試過不下百次,但越試越亂,所以才會來問 09/25 23:09
27F:→ jamesxxx1997: 還是我發問態度不好,或圖不清楚,都可以說 09/25 23:10
28F:→ jamesxxx1997: 但關於爬文或嘗試,我真的盡力了,也卡住一個多星期 09/25 23:10
29F:→ jamesxxx1997: 所以才會把問題濃縮,畫成圖來整理問題並提問 09/25 23:11
30F:→ jamesxxx1997: 所以真的很希望您能看一下我的問題敘述,並跟我說 09/25 23:12
31F:→ s860134: 我的理解是這樣,你的問題混雜兩件事情 09/26 00:22
32F:→ s860134: 你設定文自編輯器這些編碼,只是讓你自己看到而已 09/26 00:23
33F:→ s860134: 跟 python interpreter 吃進去的沒什麼關係 09/26 00:23
34F:→ s860134: 對 python3 來說 '\u5000' == '倀' 09/26 00:25
35F:→ s860134: 兩者之間的差異在轉成 byte code 時就已經被消除了 09/26 00:31
36F:→ jamesxxx1997: 恩恩,昨天有請教過同學,發現我想太多了 09/26 17:19
37F:→ jamesxxx1997: 我還是碰到問題時再把code丟上來,這樣問題比較明確 09/26 17:19
38F:→ jamesxxx1997: 謝謝解答唷~~~~~~~ 09/26 17:20