次のコードは、文字列内の文字がすべて中国語文字であるかどうかをテストします。 Python 3では動作しますが、Python 2.7では動作しません。 Python 2.7でどうすればいいですか? name
を提供Python 2.7:文字列内の文字がすべて中国語文字であるかどうかをテストする
for ch in name:
if ord(ch) < 0x4e00 or ord(ch) > 0x9fff:
return False
次のコードは、文字列内の文字がすべて中国語文字であるかどうかをテストします。 Python 3では動作しますが、Python 2.7では動作しません。 Python 2.7でどうすればいいですか? name
を提供Python 2.7:文字列内の文字がすべて中国語文字であるかどうかをテストする
for ch in name:
if ord(ch) < 0x4e00 or ord(ch) > 0x9fff:
return False
# byte str (you probably get from GAE)
In [1]: s = """Chinese (汉语/漢語 Hànyǔ or 中文 Zhōngwén) is a group of related
language varieties, several of which are not mutually intelligible,"""
# unicode str
In [2]: us = u"""Chinese (汉语/漢語 Hànyǔ or 中文 Zhōngwén) is a group of related
language varieties, several of which are not mutually intelligible,"""
# convert to unicode using str.decode('utf-8')
In [3]: print ''.join(c for c in s.decode('utf-8')
if u'\u4e00' <= c <= u'\u9fff')
汉语漢語中文
In [4]: print ''.join(c for c in us if u'\u4e00' <= c <= u'\u9fff')
汉语漢語中文
:
<form accept-charset="utf-8" action="...">
、サーバ側のデータをデコード文字は中国語ですが、これは次のようなものです:
all(u'\u4e00' <= c <= u'\u9fff' for c in name.decode('utf-8'))
あなたのPythonではpplicationは、内部でユニコードを使用します。&エンコードは遅く、unicode sandwichを作成します。
これは、Python 2.7で私のために正常に動作し、があるunicode()
値:
>>> ord(u'\u4e00') < 0x4e00
False
>>> ord(u'\u4dff') < 0x4e00
True
あなたはユニコード値で直接文字を比較する場合は、ここord
を使用する必要はありません。
>>> u'\u4e00' < u'\u4e00'
False
>>> u'\u4dff' < u'\u4e00'
True
着信要求のデータはまだ復号されていません。あなたが最初にそれを行う必要があります。明示的にブラウザが正しいエンコーディングを使用していることを確認するために、フォームタグにaccept-charset
属性を設定:すべてを確認するために
name = self.request.get('name').decode('utf8')
I Google App EngineでPythonを使用しています。 'name'はフォームから' name = self.request.get( 'name') 'によって得られ、ユーザは漢字のみを入力する必要があります。 'name'をユニコードに変換する必要がありますか?そしてどうやって? –
@Tang:はい、まずデータをUnicodeに変換する必要があります。ブラウザは通常、HTMLページのエンコーディングを使用します。したがって、あなたのページに 'Content-Type:text/html; charset = utf8'とすると、UTF-8としてもデコードできると仮定できます。 –
'name'はユニコード文字列かバイト文字列ですか?ここで 'ord'を使う必要はありません.btw:' ch u '\ u9fff': 'も使えます。 –
関連:http://stackoverflow.com/questions/16027450/is-there-a-way-to-know-whether-a-unicode-string-contains-any-chinese-japanese-ch/16028174#16028174 – Daenyth