python - 对编码和解码感到困惑
问题描述
所以我想通过编写字母的十六进制值来打印希伯来语(或任何其他语言),对其进行解码并将其打印到终端。
这是我尝试过的,我从https://en.wikipedia.org/wiki/Code_page_862获得了 cp862 的代码页并尝试打印第一个字母。它输出其他东西,而不是想要的结果。
我做错了什么 ?
letter = b'\x05\xD0'
print(letter.decode('cp862'))
输出 :
wahalez@wahalez:~/dev/python$ python p25.py
╨</p>
我什么时候使用 encode 什么时候使用 decode ?
编辑 :
另一个奇怪的行为是我交换了字节并将其解码为 utf-16 并且它起作用了。为什么 ?..
letter2 = b'\xD0\x05'
print(letter2.decode('utf-16'))
解决方案
你误读了那个图表。该值0x05D0
是该字符的unicode代码点。该值0x80
是 CP862 的值(见8_
右边的和_0
顶部的?)。所以如果你要写:
>>> letter = b'\x80'
>>> print(letter.decode('cp862'))
א
你会得到你想要的。
我怎样才能使用 unicode 呢?用什么编码?
我不完全清楚你想做什么。如果您只想使用表格中的字符,您可以复制并粘贴它。例如:
letter = 'א`
无需为编码或解码而烦恼。
如果要从特定的 unicode 代码点生成字符,只需使用以下chr
函数:
>>> print(chr(0x05d0))
א
推荐阅读
- javascript - 使用 nodejs 在 html 页面上显示 SQLServer 查询结果
- python - Python 列表推导与返回列表的函数
- php - 无法在用户时间轴上发布
- java - JPQL 请求的问题需要很长时间才能执行超过 600000 个注册
- c# - 如何使用 StreamReader 读取 json 文件?
- javascript - 在 url 中隐藏选中的无线电输入值(get 方法)
- scala - Flink:java.lang.UnsupportedOperationException:无法覆盖 KeyedStream 的分区
- python - 如何比较字符串中的字符
- python - 在python 3中使用matplotlib散点函数时如何更改点子集的绘图标记
- sql - 使用 CASE WHEN 语句和 IN (SELECT...FROM) 子查询