UTF8大写显示不正确

问题描述:

我有一个简单的问题,但我没有找到任何解决此问题的方法。UTF8大写显示不正确

我在数据库(MySQL)中使用utf8_general_ci编码,而在网站中使用的是PHP。

在HTML页面中也使用utf-8作为编码(<meta charset="utf-8">)。

问题是,在数据库中我存储了一个以Â开头的单词,在引用之后它显示为Ã,差异在^和〜之间。未编码:Â。附:Ã。

问题是,在网站上出现这个 ?在Â的地方,但如果我改变它的小写它通常出现。只有大写字母在加重时出现错误。

我希望我很清楚。

谢谢。

+0

什么DBMS?你使用的是ASP吗? PHP的? – 1010 2014-10-07 18:56:01

+0

已经编辑过,我正在使用PHP。 DB是MySQL。谢谢您的帮助。 – Fred 2014-10-07 18:56:48

+0

你是否检查过浏览器的字符编码? – 1010 2014-10-08 03:03:47

您可能还需要设置MySQL链接的传输字符编码。

mysql_query('SET NAMES "utf8"'); 
mysql_query('SET CHARACTER SET utf8'); 
mysql_set_charset('utf8'); 

如果这没有帮助,请确保服务器不会覆盖您的<meta charset="utf-8">通过Content-Type HTTP标头。您可能需要覆写以及使用

header('Content-Type: text/html; charset=utf-8'); 
+0

感谢您的快速回答。我会尽力做到这一点。只有一个问题,如果其他小写字母与编码工作为什么不大写? – Fred 2014-10-07 19:01:36

+0

这可能是小写重音字符与您正在通信的字符集共享相同的UTF-8代码,但大写字母与其他编码中的其他位置不同。也许他们在小写字母之后再加一个字符,并将整个大写字母部分移动一个。 – Zenorbi 2014-10-07 19:05:53

+0

它不工作......现在出现这封信,但其他人看起来像这样:á。它不是“解码”,如果在数据库中是Â它看起来像Â,如果我把它看起来Ã。但编码的出现编码。 – Fred 2014-10-07 19:06:30

正如你可以看到here,解码UTF-8编码的Windows1252或ISO-8859-1产生,而不是一个。

并且在windows1252中有E2代码,它与它的unicode代码点U + 00E2一致。 这使我认为你的应用程序的某些部分正确解码utf-8字符串,但未能正确编码它。

你应该检查你的数据是否一致地存储在你的数据库的utf-8中,也许你可以选择你的varchar数据作为varbinary来确定(在sqlserver中你可以转换为二进制,在mysql中我不知道是否有用)。

并检查您的html输出的来源,看看你实际得到什么字节。

这不是正确的答案,但太长了评论...

+0

这是一个红色的鲱鱼,UTF-8和Latin-1和CP1252在160-255范围内基本相同,其中包括西欧语言(某些荒谬约束取样)的小写字母和大写字母重音字符。 – tripleee 2014-10-08 03:34:03

+0

mmm,码点重合,但utf8使用两个字节(它们都不是E2),因此它们不相同。 – 1010 2014-10-08 03:40:02

+0

哎呀,主要的失误,是的;感谢您的更正。 Unicode和Latin-1在这个范围内是相同的,但UTF-8显然不是。 – tripleee 2014-10-08 04:06:56