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非常感谢。