Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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_Python_String_Encoding_Character Encoding - Fatal编程技术网

字符串转换python

字符串转换python,python,string,encoding,character-encoding,Python,String,Encoding,Character Encoding,我有一个关于python3中字符串转换的小问题 s='\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x000\x00' 打印->给出输出: 1121050400 但是,当我尝试使用以下命令转换字符串时: 通过TESS,“utf16”。解码“utf16”,我得到“\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00” 以编程方式获得与打印相同输出的方法是什么?您只需解码此二进制文件,就可

我有一个关于python3中字符串转换的小问题

s='\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x000\x00'

打印->给出输出:

1121050400

但是,当我尝试使用以下命令转换字符串时:

通过TESS,“utf16”。解码“utf16”,我得到“\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00”


以编程方式获得与打印相同输出的方法是什么?

您只需解码此二进制文件,就可以得到答案

x = b'\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00'
str1 = x.decode('utf-8')
print(" ".join([i for i in str1 if ord(i) != 0]))
第二种解决方案:

x = '1 2 1 0 5 5 0 4 0 0'
str_utf32 = x.encode('utf16')
print("Encoding :",str_utf32)
print("Decoding :",str_utf32.decode('utf16'))
输出

Encoding : b'\xff\xfe1\x00 \x002\x00 \x001\x00 \x000\x00 \x005\x00 \x005\x00 \x000\x00 \x004\x00 \x000\x00 \x000\x00'
Decoding : 1 2 1 0 5 5 0 4 0 0

你只需要解码这个二进制文件,你就会得到答案

x = b'\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00'
str1 = x.decode('utf-8')
print(" ".join([i for i in str1 if ord(i) != 0]))
第二种解决方案:

x = '1 2 1 0 5 5 0 4 0 0'
str_utf32 = x.encode('utf16')
print("Encoding :",str_utf32)
print("Decoding :",str_utf32.decode('utf16'))
输出

Encoding : b'\xff\xfe1\x00 \x002\x00 \x001\x00 \x000\x00 \x005\x00 \x005\x00 \x000\x00 \x004\x00 \x000\x00 \x000\x00'
Decoding : 1 2 1 0 5 5 0 4 0 0

在第一个示例中,您打印字符串s,console将忽略\x00。你做一个指纹

在最后一行中,从python提示符获取字符串。如果你打印它:printbytess,“utf-16”。解码“utf-16”,你就会得到你想要的

因此,Python提示符会向您显示变量,并带有上下文,例如,您也会看到“符号”,但不会看到字符串的真实表示形式,您在print中看到的是字符串的真实表示形式

增编:


print将打印参数中的字符串,最终调用str将参数转换为字符串。但是python提示符将打印用repr给出的变量的表示形式。因此,您可以打印reprbytes,“utf-16”。对“utf-16”进行解码,以获得与python交互会话中相同的字符串,但作为字符串。您可以指定这样的函数r=reprbytes….decode…,而不是打印,因此您有r[0]is',r[1]is\,等等。

在第一个示例中,您打印字符串s,console将忽略\x00。你做一个指纹

在最后一行中,从python提示符获取字符串。如果你打印它:printbytess,“utf-16”。解码“utf-16”,你就会得到你想要的

因此,Python提示符会向您显示变量,并带有上下文,例如,您也会看到“符号”,但不会看到字符串的真实表示形式,您在print中看到的是字符串的真实表示形式

增编:


print将打印参数中的字符串,最终调用str将参数转换为字符串。但是python提示符将打印用repr给出的变量的表示形式。因此,您可以打印reprbytes,“utf-16”。对“utf-16”进行解码,以获得与python交互会话中相同的字符串,但作为字符串。您可以指定这样的函数r=reprbytes….decode…,而不是打印,因此您有r[0]is',r[1]is\,等等。

BTW:第二个变量是错误的。它不是UTF16,但UTF16BEIt似乎utf-16也能工作。有趣的是,我没想到“\x00”会打印为空白。顺便说一句:第二种变体是错误的。它不是UTF16,但UTF16BEIt似乎utf-16也能工作。有趣的是,我没想到“\x00”会打印为空白。您建议如何将s转换为x?x=bytess,“utf-8”。如果我接着执行bytesx,“utf-8”。解码“utf-8”,我会得到相同的字符串“\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00”。虽然如果我使用print,我会得到转换后的字符串。您建议如何将s转换为x?x=bytess,“utf-8”。如果我接着执行bytesx,“utf-8”。解码“utf-8”,我会得到相同的字符串“\x001\x002\x001\x000\x005\x005\x000\x004\x000\x000\x00”。虽然如果我使用print,我会得到转换后的字符串。谢谢@Giacomo的回答。我想通过printstrs对打印时出现的字符串执行操作。有没有办法将打印输出存储到变量或更好的方法?如果s已经是字符串,则strs是no op。如果不使用print,Python在控制台上打印的实际上是reprs。@MarkRansom说得对。这是草稿的剩余部分。我想用repr指向str,但它也没那么有用。我将编辑掉这本书str@sk1pro99:我添加了关于如何在第二种情况下获取字符串的内容。第一种情况和第二种情况下的精确输出都很困难,这取决于控制台和字体\x00在Unicode中没有含义,因此不会打印,但其他控制字符可能会有不同的解释。然后是所有组合字符和代码点。repr通过转义来避免控制字符和困难字符。。还有一个警告:默认情况下,您的代码可以在Unix/Macos now Unicode中工作,但在Windows上可能会得到不同的输出。谢谢@Giacomo的回答。我想通过printstrs对打印时出现的字符串执行操作。有没有办法将打印输出存储到变量或更好的方法?如果s已经是字符串,则strs是no op。如果不使用print,Python在控制台上打印的实际上是reprs。@MarkRansom说得对。这是草稿的剩余部分。我想用repr指向str,但它也没那么有用。我将编辑掉这本书str@sk1pro99:我添加了关于如何在第二种情况下获取字符串的内容。第一种情况和第二种情况下的精确输出都很困难,这取决于控制台和字体\x00在Unicode中没有含义,因此不会打印,但其他控制字符可能会有不同的解释。然后是所有组合字符和代码点。repr通过转义避免控制字符和困难字符 他们还有一个警告:默认情况下,您的代码可以在Unix/Macos now Unicode中工作,但在Windows上可能会得到不同的输出。