Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/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 如何访问带有字节的字符串?_Python_String - Fatal编程技术网

Python 如何访问带有字节的字符串?

Python 如何访问带有字节的字符串?,python,string,Python,String,我有一个包含多语言字母和特殊字符的字符串 str = "가나42hello world 門()&*&# [1]" 在上面的字符串中,”가", "나", "門" 是2个字节,其余是1个字节 在这种情况下,有没有办法获取与该字符串的第7个字节相对应的字符“h”(而不是str[7],'l') 我是说,我可以用字节索引进行随机访问吗 我使用Python。Python中的字符串(假设Python 3)是字符序列(例如。한 是一个字符) 它们可以在内存中用不同的字节表

我有一个包含多语言字母和特殊字符的字符串

str = "가나42hello world 門()&*&#  [1]"
在上面的字符串中,”가", "나", "門" 是2个字节,其余是1个字节

在这种情况下,有没有办法获取与该字符串的第7个字节相对应的字符“h”(而不是
str[7]
'l'

我是说,我可以用字节索引进行随机访问吗

我使用Python。

Python中的字符串(假设Python 3)是字符序列(例如。한 是一个字符)

它们可以在内存中用不同的字节表示,即用一个或多个字节表示每个字符。不是所有编码都可以表示所有字符,也不是所有编码都需要相同的字节数

假设,让我们对字符串进行编码并检查字节:

s=”가나42你好,世界門()&*&# [1]"
b=s.encode(“utf-8”)
打印(b[8])
#这将打印104,即“h”的UTF-8代码
印刷品(chr(b[8]))
#这个印着“h”
打印(b[0:3]。解码(“utf-8”))
#这印的是가'
请注意,在UTF-8中,每个韩语字符占用3个字节,而不是2个字节,因此我已经调整了索引。如果您想要默认编码,请省略参数
encode
decode
。如果您想知道使用的是哪种编码,请检查Python中的
sys.getdefaultencoding()

字符串(假设为Python 3)是字符序列(例如。한 是一个字符)

它们可以在内存中用不同的字节表示,即用一个或多个字节表示每个字符。不是所有编码都可以表示所有字符,也不是所有编码都需要相同的字节数

假设,让我们对字符串进行编码并检查字节:

s=”가나42你好,世界門()&*&# [1]"
b=s.encode(“utf-8”)
打印(b[8])
#这将打印104,即“h”的UTF-8代码
印刷品(chr(b[8]))
#这个印着“h”
打印(b[0:3]。解码(“utf-8”))
#这印的是가'

请注意,在UTF-8中,每个韩语字符占用3个字节,而不是2个字节,因此我已经调整了索引。如果您想要默认编码,请省略参数
encode
decode
。如果您想知道您使用的是哪种编码,请选中
sys.getdefaultencoding()
,这可能取决于您的编码(当我使用utf-8解码该字符串时,特殊字符是3个字节,而不是2个字节),但一般来说,您可以通过转换为字节、执行选择,然后再转换回。例如,以下将打印“h”:

s = "가나42hello world 門()&*&# [1]"
b = bytes(s, encoding="utf-8")
selection = b[8:9].decode("utf-8")
print(selection)

重要的是
b
上的切片操作是一个切片,而不是一个索引选择(例如,使用8:9获得第8个字节)。

这可能取决于您的编码(当我使用utf-8解码该字符串时,特殊字符是3个字节而不是2个字节),但通常可以通过转换为字节,执行选择,然后再转换回。例如,以下将打印“h”:

s = "가나42hello world 門()&*&# [1]"
b = bytes(s, encoding="utf-8")
selection = b[8:9].decode("utf-8")
print(selection)

重要的是
b
上的切片操作是一个切片,而不是单个索引选择(例如,使用8:9获得第8个字节).

您需要指定编码。否则,您将无法以您想要的方式访问字节。您需要指定编码。否则,您将无法以您想要的方式访问字节。我完全同意@alani非常感谢。我完全同意@alani非常感谢。