1

私は外部クラスをPHPからPythonに変換しています、それは次のようないくつかのトリックを行います:

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

ここで、$ c1、^ $ cc1、$cc2は文字です

文字は文字列であり、演算子&と|が「文字のバイナリ表現」として重複して表示されないため、Pythonではそのまま使用できないことに気づきました。わかる...

どうか、これらのいずれかをPythonのようにどのように翻訳しますか?

>>> 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
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 に答える
1

これは基本的なUTF-8エンコーディング関数です。

c1.encode('utf-8')

をネイティブに使用しない限り(そしてなぜそうではないのですか?)、最初unicodeからデコードする必要があることに注意してください。'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 に答える