1

我正在将一个外部从 PHP 转换为 Python,它做了一些技巧,例如:

if ($c1 >= "\xc0" & $c1 <= "\xdf")
[...]
$cc1 = (chr(ord($c1) / 64) | "\xc0");
[...]
$cc2 = ($c1 & "\x3f") | "\x80";

其中 $c1,^$cc1, $cc2 是字符

我刚刚意识到我不能在 python 中使用它,因为字符是字符串,而不是重复地被视为“字符的二进制表示”,其中运算符 & 和 | 说得通...

请问,你会如何以 Pythonic 的方式翻译这些?

>>> c1 = "a"
>>> (c1 & "\x3f") | "\x80"

Traceback (most recent call last):
  File "<pyshell#202>", line 1, in <module>
    (c1 & "\x3f") | "\x80"
TypeError: unsupported operand type(s) for &: 'str' and 'str'

编辑:实际上,这个 PHP 类似乎不起作用,所以它也不符合我的需要。非常感谢您的帮助。

4

3 回答 3

1

这是一个原始的 UTF-8 编码函数。

c1.encode('utf-8')

请注意,除非您unicode本机使用 s (为什么不使用?),否则您需要先解码'latin-1'

于 2013-02-08T16:25:41.893 回答
1

使用该ord函数获取值,然后使用实际数字进行屏蔽。

>>> c1 = "a"
>>> (ord(c1) & 0x3f) | 0x80
161
>>> hex((ord(c1) & 0x3f) | 0x80)
'0xa1'
于 2013-02-08T16:37:00.717 回答
1
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
>>> c1 = 'd'
>>> # if ($c1 >= "\xc0" & $c1 <= "\xdf")
... 
>>> ord(c1) >= 0xc0 and ord(c1) <= 0xdf
False
>>> # $cc1 = (chr(ord($c1) / 64) | "\xc0");
... 
>>> chr(ord(c1) / 64 | 0xc0)
'\xc1'
>>> # $cc2 = ($c1 & "\x3f") | "\x80";
... 
>>> ord(c1) & 0x3f | 0x80
164
>>> 
于 2013-02-08T16:40:37.120 回答