Re: [問題] 中文編碼的疑惑..
: #-*- coding: utf-8 -*-
: print '科科'.decode('utf8')
: print repr('科科'.decode('utf8'))
: 可是這樣到頭來繞一圈都是一樣的,那何苦多繞一圈
: 就直接用unicode就可以了
補充一下我自己的看法
我之前有個疑惑
coding: utf-8都跟他說檔案是utf-8了
為什麼他不自己去把'科科'轉碼呢
後來想通了
''是可以用來做binary string的
如果他自動轉的話 就失去支援binary string的能力了
這樣我們要用binary string可能就只能用hex來寫了
而且找定義來說 str本來就是encoding independent的
--
個人淺見
--
順便徵求一下str<->unicode換湯不換藥的方法
我的意思是 只換型態 內容不變..
目前是用
def deuni(s):
s=repr(s)[2:-1]
exec 's="%s"' % s
return s
來把unicode型態的東西硬轉成str
因為之前寫一些程式透過openoffice的uno去連mssql
但uno輸入/輸出的都是unicode型態的資料
而我那資料庫裡面的東西都是big5編碼
雖然我指定了charset為big5:
dtsrc3=createUnoService('com.sun.star.sdbc.DriverManager')
conn3=dtsrc3.getConnectionWithInfo('sdbc:odbc:mssql',Array(makePropertyValue('Charset',2026),makePropertyValue('user','test'),makePropertyValue('password','test')))
stat3=conn3.createStatement()
但是他送出來的資料還是包裝成unicode的big5
(不指定的話就是被轉碼轉爛的無意義資料)
所以我必須這樣把他硬轉回來
但有時候會有問題
repr()跑出來的東西有時候會有\u0000的型式
就我目前遇到的case只有 \u201a (應該是全形空白的一半吧 忘了是哪一半)
我只在exec之前放了一個s=s.replace('\\u201a','\\x82')
我用的是老舊的openoffice內建的python, 版本忘了...
裡面的python甚至連big5的encoding都不支援...
不過因為某些環境限制 我只有這老古董可以用而且不能換...
要送進去的SQL裡面有中文的時候也要用u"select * from xxoo where abcd='丁丁是個人才'", 檔案要存成big5
這樣才能正確match到字串
不然丁丁會被轉爛掉...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.126.12
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章