以下代码测试字符串中的字符是否都是汉字,它适用于Python 3,但不适用于Python 2.7。在Python 2.7中如何实现这个功能?
for ch in name:
if ord(ch) < 0x4e00 or ord(ch) > 0x9fff:
return False
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')
name
的值,代码为name = self.request.get('name')
,用户只能输入中文字符。我需要将name
转换成Unicode吗?如果需要,应该如何转换? - Randy TangContent-Type: text/html; charset=utf8
提供页面,则可以假定您也可以解码为UTF-8。 - Martijn Pieters
if ch < u'\u4e00' or ch > u'\u9fff':
也可以起作用。 - Martijn Pieters