以下代码测试字符串中的字符是否都是汉字。它适用于 Python 3,但不适用于 Python 2.7。我如何在 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 中做到这一点?
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')
汉语漢語中文
为了确保所有字符都是中文,应该这样做:
all(u'\u4e00' <= c <= u'\u9fff' for c in name.decode('utf-8'))
在您的 python 应用程序中,在内部使用 unicode - 早期解码和后期编码 - 创建一个unicode 三明治。
这在 Python 2.7 中对我来说很好,提供name
的是一个unicode()
值:
>>> ord(u'\u4e00') < 0x4e00
False
>>> ord(u'\u4dff') < 0x4e00
True
如果直接将字符与 unicode 值进行比较,则不必在ord
此处使用:
>>> u'\u4e00' < u'\u4e00'
False
>>> u'\u4dff' < u'\u4e00'
True
来自传入请求的数据尚未解码为 unicode,您需要先进行解码。显式设置accept-charset
表单标签上的属性以确保浏览器使用正确的编码:
<form accept-charset="utf-8" action="...">
然后在服务器端解码数据:
name = self.request.get('name').decode('utf8')