Python中类似的C字符串格式

Python中类似的C字符串格式,python,encoding,Python,Encoding,我需要读取带有一些奇怪字符串行的文件,如:\x72\xFE\x20TEST\u string\0\0\0 但是当我打印这个字符串时(使用repr()),它会打印:r\xfe TEST\u string\x00\x00\x00 例如: >>> test = '\x72\xFE\x20TEST_STRING\0\0\0' >>> print test r? TEST_STRING >>> print repr(test) 'r\xfe TEST_

我需要读取带有一些奇怪字符串行的文件,如:\x72\xFE\x20TEST\u string\0\0\0

但是当我打印这个字符串时(使用repr()),它会打印:r\xfe TEST\u string\x00\x00\x00

例如:

>>> test = '\x72\xFE\x20TEST_STRING\0\0\0'
>>> print test
r? TEST_STRING
>>> print repr(test)
'r\xfe TEST_STRING\x00\x00\x00'
如何从Python和编辑器中的文件中获得相同的行?
python是否在字符串操作期间更改编码?

您应该使用python的原始字符串,如下所示(注意字符串前面的“r”)

那么它就不会试图把逃逸行为解释为特殊的角色

在读取文本文件时,python不应该试图将字符串解释为具有多字节unicode字符。您应该获得文件中的确切内容:

In [22]: fp = open("test.txt", "r")

In [23]: s = fp.read()

In [24]: s
Out[24]: '\\x72\\xFE\\x20TEST_STRING\\0\\0\\0\n\n'

In [25]: print s
\x72\xFE\x20TEST_STRING\0\0\0

您应该使用python的原始字符串,如下所示(注意字符串前面的“r”)

那么它就不会试图把逃逸行为解释为特殊的角色

在读取文本文件时,python不应该试图将字符串解释为具有多字节unicode字符。您应该获得文件中的确切内容:

In [22]: fp = open("test.txt", "r")

In [23]: s = fp.read()

In [24]: s
Out[24]: '\\x72\\xFE\\x20TEST_STRING\\0\\0\\0\n\n'

In [25]: print s
\x72\xFE\x20TEST_STRING\0\0\0

\x20
是一个空格。当您将其放入Python字符串时,它的存储方式与空格完全相同

如果字符串中有可打印字符,则无论它们是作为实际字符还是某种转义序列键入的,它们都将以相同的方式表示,因为它们实际上是相同的值

考虑以下示例:

>>> ' ' == '\x20'
True

>>> hex(ord('a'))
'0x61'
>>> '\x61'
'a'

\x20
是一个空格。当您将其放入Python字符串时,它的存储方式与空格完全相同

如果字符串中有可打印字符,则无论它们是作为实际字符还是某种转义序列键入的,它们都将以相同的方式表示,因为它们实际上是相同的值

考虑以下示例:

>>> ' ' == '\x20'
True

>>> hex(ord('a'))
'0x61'
>>> '\x61'
'a'

Python没有更改编码:

在打印Python时,您刚刚解析了字符串中的可打印字符:
chr(0x72)
是一个“r”;
chr(0xfe)
是不可打印的,因此您得到了“?”,
chr(0x20)
chr(32)
这是一个空格“”,并且零字节根本不打印

repr()
解析“r”,保留
chr(0xfe)
,并以
chr(0x00)
的完整十六进制表示法打印
chr(0)

因此,如果您希望在编辑器中使用与
repr()
相同的行,则必须在编辑器中使用与
repr()
相同的符号键入字符串,即您编写的字符串

test='r\xfe TEST_STRING\x00\x00\x00'

repr(test)
应打印相同的字符串:

Python未更改编码:

在打印Python时,您刚刚解析了字符串中的可打印字符:
chr(0x72)
是一个“r”;
chr(0xfe)
是不可打印的,因此您得到了“?”,
chr(0x20)
chr(32)
这是一个空格“”,并且零字节根本不打印

repr()
解析“r”,保留
chr(0xfe)
,并以
chr(0x00)
的完整十六进制表示法打印
chr(0)

因此,如果您希望在编辑器中使用与
repr()
相同的行,则必须在编辑器中使用与
repr()
相同的符号键入字符串,即您编写的字符串

test='r\xfe TEST_STRING\x00\x00\x00'

repr(test)
应打印相同的字符串:

为了避免python将反斜杠解释为转义字符,请在字符串前面加上“r”字符:

    >>> test = r'\x72\xFE\x20TEST_STRING\0\0\0'
    >>> print test
    \x72\xFE\x20TEST_STRING\0\0\0`

为了避免python将反斜杠解释为转义字符,请在字符串前面加上“r”字符:

    >>> test = r'\x72\xFE\x20TEST_STRING\0\0\0'
    >>> print test
    \x72\xFE\x20TEST_STRING\0\0\0`

您是否在问为什么
print s
的输出与
print repr
的输出不同?您的文件中实际有什么内容?你确定吗?你是怎么核实的<字符串文字中的code>'\x72'并不表示“反斜杠、字母x、数字7和数字2”;它的意思是“其值在十六进制中写为'72'的字节,即114,恰好是字母r”。您是否在问
print s
的输出为什么与
print repr(s)
的输出不同?您的文件中实际有什么?你确定吗?你是怎么核实的<字符串文字中的code>'\x72'并不表示“反斜杠、字母x、数字7和数字2”;它的意思是“其值以十六进制写成'72'的字节,即114,正好是字母r”。