我要将txt文件导入sqlite数据库,然后使用php以json格式输出这些值
json_encode
失败,抱怨非法字符。我将其跟踪到字符串terrains à bâtir
中的两个重音字符-当我在Sublime中打开文件时,此字符串可以正常显示,但是在Textedit中,该字符串显示为terrains ‡ b‚tir
有关文件及其内容的一些信息
file -i file.txt
告诉我text/plain; charset=us-ascii
mb_detect_encoding()
上的有效字符串告诉我它是ASCII
mb_detect_encoding()
上的无效字符串告诉我它是UTF-8
hexdump -C file.txt | grep terrains
将字符显示为点: 00a4eb30 7c 74 65 72 72 61 69 6e 73 20 e0 20 62 e2 74 69 ||terrains . b.ti|
cat file.txt | tail -c +1671338 | head -c 20
将字符显示为�,它们以相同的方式出现在我的sqlite GUI中。
ns � b�tir|11111|AAA
我知道可以使用TRANSLIT或IGNORE选项使用iconv来“修复”此问题,但最终我得到的结果与预期的有所不同。
$encoding = mb_detect_encoding($row[2]);
if($encoding !== 'ASCII') {
$enc = mb_detect_encoding($row[2]);
$converted = iconv('UTF-8', 'ASCII//IGNORE', $row[2]);
print_r($converted);
}
使用IGNORE
(显然)使用输出terrains btir
,并且使用TRANSLIT时,该方法会抱怨iconv(): Detected an illegal character in input string
我的目标是使用PHP将这些字符恢复为适当的重音形式。我该怎么做?我猜想hexdump输出提供了一些线索,但是我无法弄清哪些字节是有问题的字节或如何解决它们。