Re: [問題] 中文編碼的疑惑..

看板Python作者 (霸格尼尼)時間16年前 (2008/11/17 22:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
: #-*- 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
文章代碼(AID): #198ONLmX (Python)
文章代碼(AID): #198ONLmX (Python)