Как вырезать 8-й бит в кодированном символе KOI8-R? - PullRequest
1 голос
/ 15 июня 2009

Как вырезать 8-й бит в кодированном символе KOI8-R, чтобы транслит для русской буквы? В частности, как это сделать на Python?

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

Предполагая, что s является строкой в ​​кодировке KOI8-R, вы можете попробовать это:

>>> s = u'Код Обмена Информацией, 8 бит'.encode('koi8-r')
>>> s
>>> '\xeb\xcf\xc4 \xef\xc2\xcd\xc5\xce\xc1 \xe9\xce\xc6\xcf\xd2\xcd\xc1\xc3\xc9\xc5\xca, 8 \xc2\xc9\xd4'

>>> print ''.join([chr(ord(c) & 0x7F) for c in s])
>>> kOD oBMENA iNFORMACIEJ, 8 BIT

8-й бит удаляется (ord(c) & 0x7F).

1 голос
/ 15 июня 2009

Вот один из способов:

import array

mask = ~(1 << 7)

def convert(koistring):
    bytes = array.array('B', koistring)
    for i in range(len(bytes)):
        bytes[i] &= mask

    return bytes.tostring()

test = u'Русский Текст'.encode('koi8-r')
print convert(test) # rUSSKIJ tEKST

Я не знаю, предоставляет ли Python более чистый способ выполнения таких операций:)

1 голос
/ 15 июня 2009

Я не совсем уверен, что вы хотите, но если вы хотите обнулить 8-й бит, это можно сделать так:

character = character & ~(1 << 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...