2011-06-29 28 views
1

、pythonの上で実行されているウェブサイトでは、外国の文字を取り扱い、私は関連の質問の多くを読んでこの状況に対処する方法に関して少し不確かだきました。竜巻やRedisの

は、基本的な質問:ウェブサイト内の文字を(など、ヘブライ語、ギリシャ語、アラム語を?)「外国人」扱いするための最良の方法は何ですか?

私はUTF-8エンコーディングを使用する必要がなく、その背後にある力学が私に失われていることを取得します。

私は私のフレームワークとして竜巻を使用していますし、Redisの中にデータを格納しています。

私の現在の実装では、単にデータストアに英語キーボードと同等を保存し、適切なヘブライ語/ギリシャ語フォント(例えばBwhebb.ttf)でページ上でレンダリングすることです。これはほとんどの場合、うまくいきましたが、CGIでエンコードされている一部の文字にぶつかりつつあり、その結果、フォントメソッドが壊れてしまいます。

+2

http://farmdev.com/talks/unicode/ –

+0

http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html - それは絶対に必要なすべてのソフトウェア開発者が絶対に必要な絶対的なタイトルの記事ですUnicodeと文字セットについて知っていてください(言い訳はありません)」 - それを読んでください:それはよく書かれており、あなたに役立つと思います。具体的にはPython 3を対象 –

+0

もう一つの良い読書は、 – mac

答えて

3

コメントに記載された記事を読んでください。

短い答えですが、Redisにunicodeを格納し、Python 2.xを使用している場合は、一貫してユニコード文字列(u"")を使用してください。 Redisからの検索後、Unicode(unicode())に変換する必要があるかもしれません。

7

ユニコードでテキストを保存する必要があります。

import redis 
r = redis.Redis(host='localhost', port=6379, db=0) 

greek = u'αβγδ' 
greek, type(greek) 
# (u'\u03b1\u03b2\u03b3\u03b4', <type 'unicode'>) 

r.set(u"greek", greek) 
# True 

けれども、あなたがそれを取得するとき、Redisのは、おそらくあなたが望むものではないバイト文字列を、与える:

greek2 = r.get(u"greek") 
greek2, type(greek2) 
# ('\xce\xb1\xce\xb2\xce\xb3\xce\xb4', <type 'str'>) 

あなたはそれがそうのようにUnicodeに変換したい:

greek2 = unicode(r.get(u"greek"), "utf-8") 
greek2, type(greek2) 
# (u'\u03b1\u03b2\u03b3\u03b4', <type 'unicode'>) 
+1

おかげで、イアン(joelonsoftwareの記事は素晴らしい読書ですが、あなたはそれはほとんど10年前に書かれている見ることができます)http://diveintopython3.org/strings.htmlです。 Ps。あなたの担当者を書くことが1337である場合、その時点で。 – jmoz

関連する問題