1

現在、mysqlデータベースでelixirを使用し、redisでredispyを使用しており、すべての場所でUTF-8を選択しています。私はいくつかのデータを中国語で書きたいと思っています{'Info':‘8折’,'Name':'家乐福'}が、私が得たのは次のようなものです:

{'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}

そして、このdictをredisに保存し、redispyで取得すると、次のようになります。

{"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"}

u'前に追加8\u6298して印刷すると、それが表示されることはわかって"8折"いますが、この問題に対する機能または別の解決策はありますか?

4

4 に答える 4

1

repr(代表的な)文字列が表示されているだけです。しかし、内部文字列では同じユニコードです。

これを試して:

Python2> d = {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}
Python2> d
{'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}
Python2> print d["Name"]
家乐福

ああ、でもあなたはそれを取り戻していません。非ユニコードフォームが戻ってきました。簡単なハックの 1 つは、それを評価することです。

import ast
ast.literal_eval(d["Name"])

しかし、なぜシステムが Unicode を往復させないのかを突き止めたほうがよいでしょう。

于 2012-03-26T06:50:10.087 に答える
1

8\u6298 の前に u' を追加すると、Python はこの値をエンコード形式のない Unicode インスタンスとして保存します。

データを redis に入れる前に、Unicode インスタンスをエンコードして、実際の文字列にする必要があります。

すべての場所で UTF-8 を選択するので、

>>> x=u'8\u6298'
>>> type(x)
<type 'unicode'>
>>> y=x.encode('utf8')
>>> type(y)
<type 'str'>
>>> y
'8\xe6\x8a\x98'
>>> print y
8折

x の代わりに y を格納します。データベースから読み取ると、出力は文字列'8\xe6\x8a\x98'(8 折) になり、Python インスタンスでは'8\u6298'なくなります。

于 2012-03-26T07:11:24.777 に答える
1

後者はjsonのように見えます。最初にデコードしてみてください:

import json

resp = '{"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"}'
print json.loads(resp)

## {u'Info': u'8\u6298', u'Name': u'\u5bb6\u4e50\u798f'}
于 2012-03-26T07:05:07.173 に答える
0

文字列のユニコード バージョンが必要な場合は、こちらをご覧ください。

于 2012-03-26T07:07:18.720 に答える