使用Python
2.7,我想知道使用typeunicode
代替真正的优势是什么str
,因为它们似乎都可以容纳Unicode字符串。除了能够unicode
使用转义字符在字符串中设置Unicode代码之外,还有什么特殊的原因\
吗?:
使用以下命令执行模块:
# -*- coding: utf-8 -*-
a = 'á'
ua = u'á'
print a, ua
结果:á,á
编辑:
使用Python Shell进行更多测试:
>>> a = 'á'
>>> a
'\xc3\xa1'
>>> ua = u'á'
>>> ua
u'\xe1'
>>> ua.encode('utf8')
'\xc3\xa1'
>>> ua.encode('latin1')
'\xe1'
>>> ua
u'\xe1'
因此,该unicode
字符串似乎是使用latin1
而不是编码的utf-8
,而原始字符串是使用utf-8
?编码的 我现在更困惑了!:S
unicode
用于处理 文本 。文本是一个 代码点 序列, 可能大于一个字节 。文本可以被 编码
在一个特定的编码来表示文本作为原始字节(例如utf-8
,latin-1
…)。
注意,这unicode
是没有编码的 !python使用的内部表示形式是实现细节,只要它能够表示所需的代码点,您就不必在意它。
相反,str
在Python 2中是 字节 的简单序列。它不代表文字!
您可以将其unicode
视为某些文本的一般表示形式,可以用多种不同方式将其编码为通过表示的二进制数据序列str
。
注意:在Python 3中,unicode
已重命名为,str
并且bytes
为普通字节序列提供了一种新类型。
您可以看到一些差异:
>>> len(u'à') # a single code point
1
>>> len('à') # by default utf-8 -> takes two bytes
2
>>> len(u'à'.encode('utf-8'))
2
>>> len(u'à'.encode('latin1')) # in latin1 it takes one byte
1
>>> print u'à'.encode('utf-8') # terminal encoding is utf-8
à
>>> print u'à'.encode('latin1') # it cannot understand the latin1 byte
�
请注意,使用时,str
可以对特定编码表示形式的单个字节进行较低级别的控制,而使用时unicode
,只能在代码点级别进行控制。例如,您可以执行以下操作:
>>> 'àèìòù'
'\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9'
>>> print 'àèìòù'.replace('\xa8', '')
à�ìòù
以前是有效的UTF-8,现在已经不复存在了。使用unicode字符串,您不能以结果字符串不是有效的unicode文本的方式进行操作。您可以删除代码点,将代码点替换为其他代码点等,但不能与内部表示混淆。
以下是在java中使用正则表达式的Boundary Matchers的各种示例。 Sr.No 构造和匹配 1 ^ 一行的开头。 2 $ 一行的结尾。 3 \b 一个单词边界。 4 \B 非字边界。 5 \A 输入的开始。 6 \G 上一场比赛结束。 7 \Z 输入结束但是对于最终终止符,如果有的话。 8 \z 输入结束。
以下是使用java中的正则表达式匹配Unicode字符类的各种示例。 Sr.No 构造和匹配 1 \p{IsLatin} 拉丁文字符。 2 \p{InGreek} 希腊街区的一个角色。 3 \p{Lu} 一个大写字母。 4 \p{IsAlphabetic} 字母字符(二进制属性)。 5 \p{Sc} 货币符号。 6 \P{InGreek} 除希腊街区之外的任何角色。 7 [\p{L}&&[^\p{
我需要调用MySQL存储过程从我的python脚本。作为参数之一,我传递一个Unicode字符串(俄语),但我得到一个错误; UnicodeEncodeError:“latin-1”编解码器无法对位置0-1中的字符进行编码:序号不在范围(256)内 我的脚本: 我已经读过设置可以解决这个问题,但是当我使用字符串时: 这给了我另一个错误; UnicodeEncodeError:'utf-8'编解码器
本文向大家介绍Java实现中文字符串与unicode互转工具类,包括了Java实现中文字符串与unicode互转工具类的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java实现中文字符串与unicode互转的具体代码,供大家参考,具体内容如下 原理利用了java实现js的escape以及unescape函数。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊
在JasperReports中,处理文本需要一些专用工具来处理字符表示和文本格式化属性。 可以将任何文本视为具有特定表示结构的字符序列。 文本外观包括布局(和段落)和字体设置。 但在大多数情况下,文本布局保持不变,在不同的语言环境中运行报表时,字体设置可能会更改。 我们知道不同的语言在特定的字符表示方面需要不同的字符集。 因此,使用文本意味着使用字体。 但是,有关如何在JasperReports中
本文向大家介绍浅谈Unicode与JavaScript的发展史,包括了浅谈Unicode与JavaScript的发展史的使用技巧和注意事项,需要的朋友参考一下 一、Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了。 它从0开始,为每个符号指定一个编号,这叫做"码点"(codepoint)