python - Python中的字节操作
问题描述
我正在做一个项目,在这个项目中我必须使用 python 执行一些字节操作,我想在继续之前了解一些基本原理。
t1 = b"\xAC\x42\x4C\x45\x54\x43\x48\x49\x4E\x47\x4C\x45\x59"
t2 = "\xAC\x42\x4C\x45\x54\x43\x48\x49\x4E\x47\x4C\x45\x59"
print("Adding b character before: ",t1)
print("Using bytes(str): ",bytes(t2,"utf-8"))
print("Using str.encode: ",t2.encode())
特别是,当我运行上面的代码时,我无法理解为什么控制台会打印这个:
C:\Users\Marco\PycharmProjects\codeTest\venv\Scripts\python.exe C:/Users/Marco/PycharmProjects/codeTest/msgPack/temp.py
Adding b character before: b'\xacBLETCHINGLEY'
Using bytes(str): b'\xc2\xacBLETCHINGLEY'
Using str.encode: b'\xc2\xacBLETCHINGLEY'
我想了解的是,为什么如果我使用 bytes() 或 decode,我会在值前面得到一个额外的“\xc2” 。这是什么意思?这应该出现吗?如果是这样,我怎样才能在不使用第一种方法的情况下摆脱它?
解决方案
在字符串文字中,\xhh
(h 是十六进制数字)选择对应的 unicode 字符U+0000
to U+00FF
,其中 U+00AC 是 ¬“非符号”。编码为 utf-8 时,所有高于 0x7F 的代码点占用两个或更多字节。\xc2\xac
是 的 utf-8 编码U+00AC
。
>>> "\u00AC" == "\xAC"
True
>>> "\u00AC" == "¬"
True
>>> "\xAC" == "¬"
True
>>> "\u00AC".encode('utf-8')
b'\xc2\xac'
>>> "¬".encode("utf-8")
b'\xc2\xac'
推荐阅读
- pytorch - 在将 GPU 用于 PyTorch 模型时,出现 CUDA 错误:未知错误?
- php - 从 HTML 调用 PHP 函数
- asp.net - 从脱机 IIS 重定向到维护站点
- r - 使用 R 删除基于每个组的重复数据
- c# - 当您在“for”循环中访问不同的值时,CPU 缓存如何工作?
- java - 如何修复“线程“主”java.util.NoSuchElementException中的异常”?
- c++ - strtoull() 的输出在转换为双精度然后返回到 uint64_t 时会丢失精度
- angular - IE11 丢弃请求标头 XHR
- vba - 如何将Word文档中的文本获取到另一个Word文档中
- python - 在 3D 中查找随机最近的邻居