python 2の符号化問題(split処理ファイルが深いため)

4094 ワード

甲魚ちゃんとカスタマーサービスでおしゃべりpython 2.7バージョン、その中にif role==“小さい甲の魚”があって、ifに入ることができなくて、しかしまた間違いを報告していないで、符号化の問題で、両者は比較していないのでif文に入ることができません
#      
def save(boy, girl, count):
    file_name_boy = 'boy_' +str(count)+'.txt'
    file_name_girl = 'girl' +str(count)+'.txt'
    #        ,       
    with open(file_name_boy, 'w') as boy_file:
        boy_file.writelines(boy)
    with open(file_name_boy, 'w') as girl_file:
        girl_file.writelines(girl)

#       
def split_file(file_name):
    with open(file_name) as txt:
        boy = []
        girl = []
        count = 1
        a = 0
        for each_line in txt:
            if each_line[0:6] != '======':
                #split:  :      role,
                (role, line_spoken) = each_line.split(':', 1)
                if role.decode('gbk') == u'   ':        #        , txt       gbk    ,             utf-8  
                    boy.append(line_spoken)                #         ,       unicode    ,gbk    unicode  ,          
                                                           # u  unicode  
                if role.decode('gbk') == u'   ':
                    girl.append(line_spoken)
            else:
                save(boy, girl, count)
                count+=1

#        
split_file('record.txt')


コーディングの問題:
python 2では、符号化の問題があります.一般的にunicodeという中間コードがありますが、記憶がもったいないので符号化して記憶する必要はありません.中間量として使うので、比較しやすいなどです.
一方utf 8とgbkはいずれもUnicodeベースの符号化であり、中国語をサポートしている(符号化されていない)ので、decode(’テキスト対応符号化’)で復号し、Unicodeフォーマットにすることができる
対応するunicodeは、encode(’所望の符号化フォーマット’)によって、utf 8およびgbkなどの対応する符号化フォーマットに変更することができる.
pyファイルが前に明示的に符号化されると、コードの中の未明示的な符号化はすべてこのデフォルトの符号化フォーマットであり、例えばヘッダにutf 8の明示があれば、中の文字列のデフォルトはutf 8の符号化である.
!!普通はコードの中ですべての文字をunicodeコードのフォーマットに変えて、文字列の処理を便利にして、しかし出力する時、相応の符号化に転化することを忘れないでください
pyファイルヘッダの前に符号化がなければ、中のデフォルトはasciiコードで、asciiコードは主に英語といくつかの記号の対応コードで、中国語がないので中国語を表示できません
chardetビューをロードできます.あるコンテンツに対応する符号化により、import chardetの復号が容易になります.
str = "xxxxx"
str_type = chardet.detect(str)
code = str_type['encoding']

IO時の符号化問題txtがtxtファイルを読み出す場合、txtファイルがANSI符号であれば、gbk符号として読み込まれ、gbkで復号することができる.txtファイルがutf-8符号化である場合、読み込まれたものもutf-8符号化である.一方、txtがunicodeである場合、読み込まれたテキスト符号化が「utf-16」になる奇妙な現象を発見するので、utf-16で復号する必要がある.