我正在尝试将此匈牙利文本文件导入 MySQL 表,但匈牙利字符总是损坏。我已经为导入文件和表尝试了许多编码,但没有找到正确的组合。
文件格式为每行一个单词和一个数字,以空格分隔。我的导入表有两列,varchar 和 integer。我正在使用 MySQL 5.5.16 和 phpMyAdmin 3.4.5。首选 phpMyAdmin 解决方案,但如有必要,我可以使用命令行。
提前致谢!
编辑:上面固定的断开链接
我正在尝试将此匈牙利文本文件导入 MySQL 表,但匈牙利字符总是损坏。我已经为导入文件和表尝试了许多编码,但没有找到正确的组合。
文件格式为每行一个单词和一个数字,以空格分隔。我的导入表有两列,varchar 和 integer。我正在使用 MySQL 5.5.16 和 phpMyAdmin 3.4.5。首选 phpMyAdmin 解决方案,但如有必要,我可以使用命令行。
提前致谢!
编辑:上面固定的断开链接
您的文件似乎以 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 编码,它必然会如此。
尝试此解决方案将文件转换为 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()
完成此操作后,您可以使用load data infile将此文件加载到 mysql 中。
还要确保 LOAD DATA INFILE 的 CHARACTER SET 子句设置为文件的编码,因为它可以覆盖 character_set_database 系统变量