0

このハンガリー語のテキスト ファイルを MySQL テーブルにインポートしようとしていますが、ハンガリー語の文字が常に破損しています。インポート ファイルとテーブルの両方で多くのエンコーディングを試しましたが、適切な組み合わせが見つかりませんでした。

ファイル形式は、1 行に 1 つの単語と 1 つの数字をスペースで区切ったものです。私のインポート テーブルには、varchar と integer の 2 つの列があります。MySQL 5.5.16 と phpMyAdmin 3.4.5 を使用しています。phpMyAdmin ソリューションが推奨されますが、必要に応じてコマンド ラインを使用できます。

前もって感謝します!

編集: 上記のリンク切れを修正

4

2 に答える 2

1

ファイルは UTF-8 でエンコードされているようです。例えば:

$ unzip -p hu_50K.zip | sed -n 59p | xxd
0000000: 6bc3 b673 7ac3 b66e c3b6 6d20 3532 3030 k..sz..n..m 5200
0000010: 310d 0a 1..

köszönöm」はハンガリー語で「ありがとう」という意味です。それがファイルの行 59 に含まれると想定される場合、ö文字 (U+00F6) は としてエンコードされます0xc3b6これはUTF-8 です。

を使用してこのファイルをインポートするにはLOAD DATA INFILE:

LOAD DATA [LOCAL] INFILE '/path/to/hu_50K.txt'
    INTO TABLE my_table
    CHARACTER SET utf8
    FIELDS
        TERMINATED BY ' '
    LINES
        TERMINATED BY '\r\n'
    (col_word, col_number)

もちろん、col_word文字を保持できる必要があります-これもUTF-8でエンコードされている場合は必然的に保持されます。

于 2013-03-15T09:01:29.493 に答える
0

このソリューションを試して、ファイルをutf-8に変換してください

import codecs 
import commands 
f_loc = "my.file"
f_enc = commands.getoutput('file -b --mime-encoding %s' % f_loc)
 f_stream = codecs.open(f_loc, 'r', f_enc) 
f_out = codecs.open(f_loc+"b", 'w', 'utf-8') 
for l in f_stream: 
     f_output.write(l) 
 f_stream.close() 
 f_out.close()

これが完了すると、このファイルを使用して、loaddatainfileを使用してmysqlにロードできます

また、LOAD DATAINFILEのCHARACTERSET句が、character_set_databaseシステム変数をオーバーライドできるため、ファイルのエンコーディングに設定されていることを確認してください。

于 2013-03-14T20:56:35.997 に答える