Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字符串文字Vs Unicode文字Vs Unicode类型对象-内存表示_Python_Python 2.7_Unicode - Fatal编程技术网

Python 字符串文字Vs Unicode文字Vs Unicode类型对象-内存表示

Python 字符串文字Vs Unicode文字Vs Unicode类型对象-内存表示,python,python-2.7,unicode,Python,Python 2.7,Unicode,说, Unicode字符串是一系列代码点 Unicode字符串表示为Unicode类型的实例 >>这不是unicondestring='a정정 在内存中使用哪种编码技术来表示?utf-8 您可以尝试以下操作: ThisisNotUnicodeString.decode('utf-8').encode('utf-16') 如果你得到一个结果,它是UTF-8,否则它不是 如果要获取字符串的UTF-16表示形式,应首先对其进行解码,然后使用UTF-16方案进行编码: ThisisNotUnicode

说,

Unicode字符串是一系列代码点

Unicode字符串表示为
Unicode
类型的实例

>>这不是unicondestring='a정정
在内存中使用哪种编码技术来表示?utf-8

您可以尝试以下操作:

ThisisNotUnicodeString.decode('utf-8').encode('utf-16')
如果你得到一个结果,它是UTF-8,否则它不是

如果要获取字符串的UTF-16表示形式,应首先对其进行解码,然后使用UTF-16方案进行编码:

ThisisNotUnicodeString.decode('utf-8').encode('utf-16').decode('utf-16').encode('utf-8')
因此,基本上,您可以从/到UTF-8/UTF-16对给定字符串进行解码和编码,因为所有字符都可以在两种方案中表示


1)
这不是Unicode解构
是字符串文字。尽管
ThisisNotUnicodeString
不是unicode文字,但在内存中使用哪种编码技术来表示
ThisisNotUnicodeString
?因为应该有一些编码技术来表示정 或者你所说的“内存表示法”是什么意思?这可能不是在某个控制台中键入的,而是在一个具有指定编码的源文件中键入的,然后使用该编码。
a=u'a정정unicode的内部格式取决于内部版本。Windows和某些Unix系统上的Python2使用一个内部类似UTF-16的窄构建,但对于非BMP字符串,它会被破坏,因为它将代理项对计算为字符串长度中的两个字符。大多数Unix系统使用宽版本,它将每个Unicode序号存储为4字节整数。@eryksun它永远不是UTF-16。UCS-2或UCS-4。关于Unicode的内存表示问题,许多编程环境确实在内部使用UTF-8和UTF-16。问这个问题不一定是困惑的表现。根据字符串中字符的分布情况,各种表示形式在时间和空间上存在权衡。在内部,Python 3试图通过使用UCS-1、UCS-2和UCS-4的混合(取决于每个字符串中的最大序号值)来平衡这一点,并根据API请求缓存UTF-8和UTF-16编码。“依赖于shell”应该是“依赖于控制台或终端”。shell只是另一个使用控制台或终端的程序。Windows用户通常对此不清楚。许多人错误地认为cmd.exe是控制台。一般来说,Unix用户会有更清楚的理解。@eryksun在我的第三个问题(上面)中,没有看到上面的答案,比如说,失败的原因不太清楚。我对第三个问题中错误的理解是,在python2中,如果我说,
c=unicode('a정정@过度交换时,从stdin或源文件中读取文本作为已编码字节序列。例如,对于UTF-8,字节的十进制值如下所示:
[39,97,236,160,149,236,160,149,240,159,146,155,39]
,其中39是单引号的序号。它不是
u'
文字,因此编译器使用此字节序列(不带引号)创建
str
对象。这个
str
对象被传递给
unicode
构造函数,该构造函数被告知将其解码为UTF-16,这是错误的编码,在本例中失败,因为它不是偶数字节。@eryksun现在,我的问题是,如果我在
abc.py
中说
#coding=UTF-8
,并保存该文件(
abc.py
)那么,使用utf-8源代码编码还不够吗정정我这里有一个陷阱。如果我使用utf-8编码,那么我可以使用拉丁语-1解码。你认为这不可能吗?根据你选择的代码点。因为utf-8与拉丁语-1&ascii&cp-1252&向后兼容。。。
ThisisNotUnicodeString.decode('utf-8').encode('utf-16').decode('utf-16').encode('utf-8')