2017-02-06 6 views
0

ファイルにユニコード文字列があります。私はPythonでそれを読んで、ビットに変換してから、ユニコードに戻って新しいファイルに書きたいと思っています。 変数をtest_unicode = "®"にして使用すると動作します。しかし、このファイルをファイルから読んだ場合、いくつかのランダムなものが得られます(エラーを試しました=置き換え、バックスラッシュプレース、無視)。ここに私のスクリプトは次のとおりです。Pythonでファイルからユニコードを読み書きする

def frombits(bits): 
    chars = [] 
    for b in range(int(len(bits)/8)): 
     byte = bits[b*8:(b+1)*8] 
     chars.append(chr(int(''.join([str(bit) for bit in byte]), 2))) 
    return ''.join(chars) 

bit_list = '' 
with open('uni.txt', "r", encoding='utf-8', errors='replace') as f: 
    byte = f.read(1) 
    while(byte): 
     bit_list+='{0:08b}'.format(ord(byte)) 
     byte=f.read(1) 

test_unicode = '®' 
test_unicode_bit_list = '{0:08b}'.format(ord(test_unicode)) 

print(bit_list) 
print(test_unicode_bit_list) 

test_unicode = ''.join(frombits(test_unicode_bit_list)) 
read_unicode = ''.join(frombits(bit_list)) 

print(test_unicode.encode("utf-8")) 
print(read_unicode.encode("utf-8")) 

f = open("uni_test.txt", 'wb') 
f.write(test_unicode.encode("utf-8")) 
f = open("uni_read.txt", 'wb') 
f.write(read_unicode.encode("utf-8")) 

私は、ファイルuni.txtを作る®の内側と、このスクリプトを最後に実行した場合、私は2つのファイルを取得します(最初のユニから読み出された値を使用して、変数test_unicode 2つ目を使用して作られました.TXT):

uni_test.txt --->®

uni_read.txt ---> YY

どのように私は、この "読み取り - ビットに変換する - unicodeに変換する - 書き込み" んありませんプロシージャは正しくですか?ありがとうございました!

+0

open(filename, 'rb')を使用して、バイト単位での読み取りのためのあなたのファイルを開き、適切なエンコーディングで保存 –

+0

ありがとう、それは動作します:) –

+0

私はこの質問を受け入れて閉じることができますので、これを回答として投稿します。 –

答えて

2

`オープン(ファイル名、「RB」)を使用して、バイト単位での読み取りのためのあなたのファイルを開いて`し、適切なエンコーディングで保存

関連する問題