注: テスト テキストは UTF-8 でエンコードされており、中国語の文字は通常 3 バイトを占めます。 GBK の漢字は通常 2 バイトを占めます。
import os # 对于单个文件进行操作的函数,如果需要对文件夹进行操作,可以使用一个函数包装它,这样不用修改本函数,即达到扩展的目的了。 def transfer_encode(source_path, target_path, source_encode='GBK', target_encode='UTF-8'): with open(source_path, mode='r', errors='ignore', encoding=source_encode) as source_file: # 读取文件时,如果直接忽略报错,则程序正常执行,但是文件已经损坏了。 with open(target_path, mode='w', encoding=target_encode) as target_file: # 所以,应该捕获异常,停止程序执行。 line = source_file.readline() while line != '': target_file.write(line) line = source_file.readline() print("Execute End!") # 这个函数的功能和上面是一样的,区别在于它是以二进制读取的,然后解码、转码再写入的 def transfer_encode2(source_path, target_path, source_encode='GBK', target_encode='UTF-8'): with open(source_path, mode='rb') as source_file: with open(target_path, mode="wb") as target_file: bs = source_file.read(1024) while len(bs) != 0: target_file.write(bs.decode(source_encode).encode(target_encode)) bs = source_file.read(1024) print("Execute End!") source_path = r'C:\Users\Alfred\Desktop\test_data\test\data.txt' target_path = r'C:\Users\Alfred\Desktop\test_data\test\data1.txt' transfer_encode(source_path=source_path, target_path=target_path, source_encode="UTF-8", target_encode="GBK") # transfer_encode2(source_path=source_path, target_path=target_path) # 在cmd中使用 type命令,可以查看文件的内容,并且使用cmd默认的编码。 # 使用 chcp 命令可以查看当前使用的编码的数字编号
コンソール出力 この関数実行の出力は意味不明ですが、変換されたか知りたい実行されましたので、印刷されます。
テスト フォルダー data1.txt は、変換およびエンコードされたテキストです。
#生成されたファイルから判断すると、単語が 1 つしか含まれていないため、サイズを比較するだけで変換が成功したかどうかがわかります。 。もちろん、直接開いて閲覧することも可能ですが、直接開いて閲覧しても何も効果はなく、「龙」という漢字が表示されます。そこで、ここでは別のアプローチと別の視聴方法を使用します。
注: data.txt は UTF-8 でエンコードされ、data1.txt は GBK でエンコードされます。中国で使用される Windows はデフォルトで中国のエンコード方式を採用しているため、UTF-8 でエンコードされたテキストを表示できません。 3 番目の出力は、現在使用されているエンコーディングを表示することです。エンコーディング コードが返されます。詳細については、次の図を参照してください: 注: GBK は、GB2312 と互換性のあるエンコーディングです。 手順Python を使用する場合、1 つのファイルを変換するのに必要なコードは 7 行だけです。上に 2 つの関数を書きましたが、関数は同じです。違いは、最初の関数が特定のエンコーディングでテキスト情報を読み取り、それを別のエンコーディングで直接書き込むことです。 2 番目の関数は、ファイルの内容をバイナリ形式で読み取り、書き込みのためにデコードおよびトランスコードします。その原理は同じです。つまり、連続したデコードおよびトランスコード操作が含まれている必要があります。 エンコード、デコード、文字セット自体は非常に複雑で、詳しく説明する方法がわかりません。ここでの理解は次のように単純化できます。2 つの異なるエンコード文字セットは同じ文字を持っているため、UTF-8 でエンコードされたファイルを読み取る目的は、マッピングされている文字を取得し、それを別のコード化された文字セットにマッピングするために再度書き込むことです。文字セットなので、文字は乗り換え駅の機能に似ています。 ある文字セットを直接使用して別の文字セットの内容を読み取ると、上記の cmd に表示される文字化けが発生します。
追記: したがって、これは、なぜ大きなテキスト ファイルを開くとプログラムがフリーズするのかという問題を説明することもできます。大きなテキスト ファイルには、デコードする必要がある文字が多数含まれているためです。これはキューイングに似ており、各文字はデコードされるのを待っています。1 文字の処理は高速ですが、大きなテキスト ファイルには多数の文字が含まれます。たとえば、メモ帳では大きなテキストを何の圧力もなく開くことができますが、この非常に大きなテキストを開くと、やはりスタックしてしまいます。 (ここでのキューイングは単なる比喩です。実際の状況はわかりませんが、1 つずつ処理する必要があります。) すべてのキューが存在すると仮定して推定します。文字はすべて中国語で書かれています (実際には英語の文字もいくつかありますが、一般的には中国語がまだ大部分を占めています)。ここでは、解読する必要がある文字が約 5,000 万文字あることが示されているため、解読するのは依然として非常に困難です。処理するコンピュータを指定すると、メモ帳の概要で表示できますが、直接開くとスタックするので、ここでは試しません。以上がPython でのテキスト ファイル変換エンコーディングの問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。