1

PostgreSQL データベースから取得した UTF-8 文字列の比較に問題があります。

>>> db_conn = psycopg2.connect("dbname='foo' user='foo' host='localhost' password='xxx'")
>>> db_cursor = db_conn.cursor()
>>> sql_com = ("""SELECT my_text FROM table WHERE id = 1""")
>>> db_cursor.execute(sql_com)
>>> sql_result = db_cursor.fetchone()
>>> db_conn.commit()
>>> db_conn.close()
>>> a = sql_result[0]
>>> a
u'M\xfcnchen'
>>> type(a)
<type 'unicode'>
>>> print a
München
>>> b = u'München'
>>> type(b)
<type 'unicode'>
>>> print b
München
>>> a == b
False

なぜそうなのか、本当に混乱しています。データベースのウムラウトを含む文字列を別の文字列と比較する方法を教えてください。比較は正しいですか?私のデータベースはUTF8です:

postgres@localhost:$ psql -l
        List of databases
   Name    |  Owner   | Encoding 
-----------+----------+----------
 foo       | foo      | UTF8
4

2 に答える 2

3

これは明らかにコンソールのロケールの問題です。

u"München"u'M\xfcnchen'Unicode とUTF 'M\xc3\xbcnchen'-8 です。後者は、MünchenISO8859-1 または CP1252 と見なされる場合に使用されます。

Psycopg2 は正しい Unicode 値を提供しているようです。

于 2011-01-19T18:31:36.010 に答える
1

入力すると

b = 'München'

type(b) から何が得られますか??

Python が自動的にこれを認識するため、文字列を文字通り Unicode テキストに変換する必要はないかもしれません。

編集:私は私のpython CLIからこれを取得します:

>>> b = u'München'
>>> b
u'M\xfcnchen'
>>> print b
München

印刷結果を別のエンコーディングで取得している間

于 2011-01-19T17:47:03.227 に答える