簡體   English   中英

從文件/ sqlite數據庫中讀取unicode字符並在Python中使用它

[英]Reading unicode characters from file/sqlite database and using it in Python

我有一個帶有unicode字符的變量列表,其中一些用於化學葯品,例如臭氧氣體:例如'O \\ u2083'。 所有這些都存儲在sqlite數據庫中,該數據庫以Python代碼讀取以生成O 3 但是,當我閱讀時得到“ O \\\\ u2083”。 使用包含字符串'O \\ u2083'的csv文件創建sqlite數據庫。 我知道\\ u2083不會以Unicode字符的形式存儲在sqlite數據庫中,而是以6個Unicode字符(即\\,u,2,0,8,3)存儲。 在這種情況下,有什么方法可以識別unicode字符? 現在,我要解決的第一個選擇是創建一個函數來識別字符集並替換unicode字符。 有沒有像這樣的東西已經實施?

記住所有內容都是字節很重要。 要將字節提取到對您有用的東西中,您一定要知道在提取數據時使用哪種編碼。 太多模棱兩可的情況無法通過分析數據來確定編碼。 當您從程序中發送數據時,所有數據又又回到了字節。 根據您使用的是Python 2.x還是3.x,您對Unicode和Python會有不同的體驗。

但是,您可以嘗試編碼,並且只需對錯誤進行“替換”即可。 例如, the_string.encode("utf-8","replace")將嘗試編碼為utf-8,並用?替換問題? -您還可以預料到問題的特征並事先進行替換,但這很快就無法解決。 查看codecs類以了解更多替換選項。

如果您有字節字符串(長度為7),請解碼Unicode轉義。

>>> s = 'O\u2083'
>>> len(s)
7
>>> s
'O\\u2083'
>>> print(s)
O\u2083
>>> u = s.decode('unicode-escape')
>>> len(u)
2
>>> u
u'O\u2083'
>>> print(u)
O₃

注意:用於打印字符的控制台/ IDE需要使用支持字符的編碼,否則在打印時會出現UnicodeEncodeError 字體也必須支持符號。

SQLite允許您直接讀取/寫入Unicode文本。 u'O\₃'兩個字符u'O'u'\₃' (您的問題有錯字: 'u\\2083' != '\₃' )。

我知道u \\ 2083不會以Unicode字符的形式存儲在sqlite數據庫中,而是以6個Unicode字符的形式存儲(這將是u,\\,2,0,8,3)

不要混淆u'u\\2083'u'\₃' :后者是單個字符,而前者是4個字符的序列: u'u'u'\\x10''\\20'被解釋為Python中的八進制), u'8'u'3'

如果您將單個Unicode字符u'\₃'到SQLite數據庫中; 它存儲為單個Unicode字符(只要抽象成立,數據庫內部Unicode的內部表示就無關緊要)。

在Python 2上,如果在模塊頂部沒有from __future__ import unicode_literals 'abc'字符串,則'abc'字符串文字會創建一個字節字符串而不是Unicode字符串-在這種情況下, 'u\\2083''\₃'都是序列字節數 ,而不是文本字符( \\uxxxx不被識別為字節 \\uxxxx內的unicode轉義序列)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM