补充代码点到python中的unicode字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了补充代码点到python中的unicode字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2437字,纯文字阅读大概需要4分钟。
内容图文
![补充代码点到python中的unicode字符串](/upload/InfoBanner/zyjiaocheng/748/2fc99eb0078148a8b8ff5ac755b51aa4.jpg)
在没有–enable-unicode = ucs4的情况下编译cpython时,unichr(0x10000)失败并出现ValueError.
是否有内置语言或核心库函数将任意unicode标量值或代码点转换为unicode字符串,无论程序运行的是什么类型的python解释器,该字符串都能正常工作?
解决方法:
是的,你走了:
>>> unichr(0xd800)+unichr(0xdc00)
u'\U00010000'
要理解的关键点是unichr()在Python解释器的字符串编码中将整数转换为单个代码单元. The Python Standard Library documentation for 2.7.3, 2. Built-in Functions, on unichr()读,
Return the Unicode string of one character whose Unicode code is the integer i…. The valid range for the argument depends how Python was configured – it may be either UCS2 [0..0xFFFF] or UCS4 [0..0x10FFFF].
ValueError
is raised otherwise.
我强调“一个字”,他们的意思是“one code unit” in Unicode terms.
我假设您使用的是Python 2.x. Python 3.x解释器没有内置的unichr()函数.而是The Python Standard Library documentation for 3.3.0, 2. Built-in Functions, on chr()读,
Return the string representing a character whose Unicode codepoint is the integer i…. The valid range for the argument is from 0 through 1,114,111 (0x10FFFF in base 16).
请注意,返回值现在是未指定长度的字符串,而不是具有单个代码单元的字符串.所以在Python 3.x中,chr(0x10000)的行为与预期的一样.它“将任意unicode标量值或代码点转换为unicode字符串,无论程序运行的是什么类型的python解释器,它都能正常工作”.
但回到Python 2.x.如果使用unichr()创建Python 2.x unicode对象,并且使用的是高于0xFFFF的Unicode标量值,那么您将提交代码以了解Python解释器的unicode对象实现.
您可以使用在标量值上尝试unichr()的函数来隔离此感知,捕获ValueError,然后使用相应的UTF-16代理项对再次尝试:
def unichr_supplemental(scalar):
try:
return unichr(scalar)
except ValueError:
return unichr( 0xd800 + ((scalar-0x10000)//0x400) ) +unichr( 0xdc00 + ((scalar-0x10000)% 0x400) )
>>> unichr_supplemental(0x41),len(unichr_supplemental(0x41))
(u'A', 1)
>>> unichr_supplemental(0x10000), len(unichr_supplemental(0x10000))
(u'\U00010000', 2)
但是您可能会发现将标量转换为UTF-32字节字符串中的4字节UTF-32值更容易,并将此字节字符串解码为unicode字符串:
>>> '\x00\x00\x00\x41'.decode('utf-32be'), ... len('\x00\x00\x00\x41'.decode('utf-32be'))
(u'A', 1)
>>> '\x00\x01\x00\x00'.decode('utf-32be'), ... len('\x00\x01\x00\x00'.decode('utf-32be'))
(u'\U00010000', 2)
上面的代码在Python 2.6.7上进行了测试,对Unicode字符串使用了UTF-16编码.我没有在Python 2.x解释器上使用UTF-32编码对Unicode字符串进行测试.但是,它应该在任何具有任何Unicode字符串实现的Python 2.x解释器上保持不变.
内容总结
以上是互联网集市为您收集整理的补充代码点到python中的unicode字符串全部内容,希望文章能够帮你解决补充代码点到python中的unicode字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。