使用unicode字符串而不是常规字符串?(Python 2.7)

使用unicode字符串而不是常规字符串?(Python 2.7),python,string,unicode,character-encoding,Python,String,Unicode,Character Encoding,据我所知,Python中字符串和unicode字符串之间存在差异。但是,在创建字符串对象时,是否可以指示Python使用unicode字符串而不是常规字符串 因此,当我获得文本输入时,我不需要使用unicode() 我可能听起来很懒,但我只是有兴趣,如果这是可能的 p、 我对字符编码知之甚少,所以如果我在Python2.6+中有任何错误,请纠正我,您可以使用来自未来导入unicode文本的,但这只会使字符串文本成为unicode。所有返回字节字符串的函数仍然返回字节字符串 例如: >>

据我所知,Python中字符串和unicode字符串之间存在差异。但是,在创建字符串对象时,是否可以指示Python使用unicode字符串而不是常规字符串

因此,当我获得文本输入时,我不需要使用
unicode()

我可能听起来很懒,但我只是有兴趣,如果这是可能的


p、 我对字符编码知之甚少,所以如果我在Python2.6+中有任何错误,请纠正我,您可以使用来自未来导入unicode文本的
,但这只会使字符串文本成为unicode。所有返回字节字符串的函数仍然返回字节字符串

例如:

>>> s = 'abc'
>>> type(s)
<type 'str'>
>>> from __future__ import unicode_literals
>>> s = 'abc'
>>> type(s)
<type 'unicode'>
>s='abc'
>>>类型
>>>从未来导入unicode文字
>>>s='abc'
>>>类型

对于您想要的行为,请使用Python 3。

在Python 2.6+中,您可以使用来自未来的导入unicode文本的
,但这只会使字符串文本成为unicode。所有返回字节字符串的函数仍然返回字节字符串

例如:

>>> s = 'abc'
>>> type(s)
<type 'str'>
>>> from __future__ import unicode_literals
>>> s = 'abc'
>>> type(s)
<type 'unicode'>
>s='abc'
>>>类型
>>>从未来导入unicode文字
>>>s='abc'
>>>类型
对于所需的行为,请使用Python 3。

例如(在pyhon interactive中,GUI Shell中的diff):

>>s=你好'
>>>
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>>us=u'你好'
>>>美国
u'\u4f60\u597d'
>>>打印类型
>>>打印类型(美国)
>>>莱恩(s)
6.
>>>莱恩(美国)
2.
简而言之:
首先,字符串对象是一个字符序列,Unicode字符串是一个代码点序列(Unicode代码单位),它们是从0到0x10ffff的数字。
它们中,len(字符串)将返回一组字节,len(unicode)将返回多个字符。此序列需要在内存中表示为一组字节(表示0-255之间的值)。将Unicode字符串转换为字节序列的规则称为编码。
我认为,如果您想通过TestRing获取数据,应该使用原始输入来代替输入。

例如(在pyhon interactive中,GUI Shell中的diff):

>>s=你好'
>>>
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>>us=u'你好'
>>>美国
u'\u4f60\u597d'
>>>打印类型
>>>打印类型(美国)
>>>莱恩(s)
6.
>>>莱恩(美国)
2.
简而言之:
首先,字符串对象是一个字符序列,Unicode字符串是一个代码点序列(Unicode代码单位),它们是从0到0x10ffff的数字。
它们中,len(字符串)将返回一组字节,len(unicode)将返回多个字符。此序列需要在内存中表示为一组字节(表示0-255之间的值)。将Unicode字符串转换为字节序列的规则称为编码。
我认为如果您想通过测试环获取数据,应该使用原始输入来代替输入

但是,在创建字符串对象时,是否可以指示Python使用unicode字符串而不是常规字符串

Python中有两种类型的字符串(在Python2和Python3上):ByTestString(字节序列)和Unicode字符串(Unicode码点序列)

使用
'abc'
字符串文字创建的字符串类型取决于Python版本以及是否存在来自\uuuuu future\uuuuuu导入unicode\u文字的
。在Python2上没有导入时,
'abc'
literal将创建一个bytestring,否则它将创建一个Unicode字符串

如果在字符串文本中使用非ascii字符,请在Python源文件的顶部添加编码声明,例如:
#-*-编码:utf-8-*-

因此,当我获得文本输入时,我不需要使用unicode()

如果“文本输入”是指您的程序以某种方式(从文件、网络、命令行)接收字节,那么否:您不应该依赖Python隐式地将字节转换为Unicode——您应该使用
Unicode\u text=bytestring.decode(character\u编码)
在收到字节后立即显式地进行转换

反过来,在程序中保持文本为Unicode。必要时(例如,通过网络发送文本),尽可能晚地将Unicode字符串转换为字节

使用ByTestRing处理二进制数据:图像、压缩内容等。使用Unicode字符串处理Python中的文本

要从文件中读取Unicode,(如果不是
locale.getpreferredencoding(False)
,则必须知道正确的字符编码)

通过网络接收Unicode文本时使用的字符编码可能取决于相应的协议,例如:

您可以使用
universal\u newlines=True
io.TextIOWrapper()
从使用
子流程
模块启动的外部进程获取Unicode文本。弄清楚Windows上应该使用什么字符编码是非常重要的(如果你读俄语,请参阅此处的血淋淋的详细信息:)

但是,在创建字符串对象时,是否可以指示Python使用unicode字符串而不是常规字符串

Python中有两种类型的字符串(在Python2和Python3上):ByTestString(字节序列)和Unicode字符串(Unicode码点序列)

使用
'abc'
字符串文字创建的字符串类型取决于Python版本以及是否存在来自\uuuuu future\uuuuuu导入unicode\u文字的
。在Python2上没有导入时,
'abc'
literal将创建一个bytestring,否则它将创建一个Unicode字符串

如果在字符串文本中使用非ascii字符,请在Python源文件的顶部添加编码声明,例如:
#-*-编码:utf-8-*-

因此,当我获得文本输入时,我不需要使用unicode()

如果“文本输入”是指您的程序以某种方式(从文件、网络、命令行)接收字节,那么否:您不应该依赖Python隐式地将字节转换为Unicode,而应该显式地进行
bytestring = b'abc'
unicode_text = u'abc'
    text = data.decode(response.headers.getparam('charset'))