2014-03-13 75 views
0

我做folloiwing步骤将数据导入到我的电子商务店:错误地显示法文字符的UTF-8字符集。

  1. 转换Excel表到CSV在Excel
  2. 在记事本++
  3. 打开CSV文件,并转换为UTF-8
  4. 导入CSV文件在phpmyadmin

如果我看网页的前端法语字符显示为?该页的字符集是utf-8

如果我将字符集更改为iso-8859-1,则所有显示都正确。

如果我检查phpmyadmin中的项目,则重音显示正确。

utf-8怎么没有正确显示它们?我认为它应该显示é等

如果我去网站的后端和编辑产品,法语说明显示在所见即所得的编辑器中正确。如果我保存该产品,则法语字符将正确显示。但这是因为所见即所得编辑器正在将字符转换为html实体。

回答

1

收集Unicode数据时的常见问题是将连接数据库/表/列字符集配置为ISO-8859-1,但插入的数据实际上是utf-8。数据库基本上被告知,“这是一些8859-1编码的数据,将它存储在这个8859-1表中”。它不会进行任何转换,因为它没有意识到数据不在8859-1中。所以数据是utf-8,但数据库基本上被告知它在8859-1。

这是一个阴险的问题,因为,如你所说,该数据库将它们转换错误如果你改变你的字符集为UTF-8,因为它会转换为“8859”的数据(remmember的databae 认为它是8859-1)转换为utf-8 - 当然这种转换失败了,因为数据确实在utf-8中。

所以基本上问题是,phpmyadmin是在8859-1,但你告诉它插入数据在8859-1,然后告诉它你提供数据在8859-1,然后给它的utf-8数据。数据库认为它是8859-1,所以解决这个问题的唯一简单方法是:a)继续使用8859-1,即使它不是,并且希望你永远不必处理排序,搜索,整理等(可能会工作在你的情况下),或b)拔出数据为8859-1(保留未转换),然后在设置数据库和连接到utf-8之后重新插入它,以便数据库知道数据真的是什么字符集是英寸

希望是有道理的。让我知道如果它不。这是一个很难包围你的头。

+0

我想我读了几次后明白你的意思。我怎样才能看到数据库设置的字符集?我假设它是8859-1,但是当我转到数据库上的操作选项卡时,它显示utf8_general_ci – Sackling

+0

不确定关于phpmyadmin,但一般情况下https://dev.mysql.com/doc/refman/5.5/en/charset.html可能有帮助。基本上,服务器有一个默认字符集,一个表有一个,一列可能有一个字符集,而一个连接也有一个字符集。因此,了解全局可能是必要的。如果你在phpmyadmin中检查数据库,你会看到phpmyadmin的设置,而不是你的应用程序 - 他们可能不同意。 'SHOW CREATE TABLE xxx'是查看表xxx及其列的字符集的一种方法。 https://dev.mysql.com/doc/refman/5.5/en/charset-connection.html显示服务器/ conn变量。 –

0

你可能会考虑用PHP打开你的csv(因为你在你的标签中提到它),并在使用查询保存它们之前在字段上使用utf8_encode。