我有问题我的拉脱维亚语数据库中有一些数据(即Valentīna),我需要在页面上显示这些数据。
其他数据以cp1257编码保存,看起来像AÎDA MACIJEVSKA-并显示为Aīda Macijevska

所以我尝试过...

1 - ucwords(mb_strtolower(iconv("windows-1257", "UTF-8//TRANSLIT", trim($row['pac_name'])), "UTF-8"));
2 - ucwords(mb_strtolower(iconv("windows-1257", "UTF-8", trim($row['pac_name'])), "UTF-8"));
3 - just show without any converting from DB `$row["pac_name"]`;


并且所有3个点都显示相同的结果-Valent?na

P.S数据库具有utf8_general_ci排序规则,我也给出了utf-8编码的标头-header('Content-Type: text/html; charset=utf-8');

所以有人可以帮我解决我的问题吗?

最佳答案

假设您真正使用的是cp1257而不是utf8,那么您需要


SET NAMES cp1257(或客户端通过其他某种方式告诉mysqld使用cp1257对字节进行编码)
每个列上的CHARACTER SET cp1257(或者可能是表定义中的默认值)。


但是听起来您应该使用utf8,而不是cp1257 ...

如我所见,Îcp1257中不存在。参考:http://en.wikipedia.org/wiki/Windows-1257。因此,您提到的代码可以通过使用ī?随意将其固定。

如果您确实需要I-hat,请使用utf8。请注意,归类utf8_latvian_ci存在。这里提到的所有i确实存在于utf8中。

如果您还有其他疑问,请在任何文本中提供SELECT HEX(col)...。例如(为清楚起见添加了空格):

在utf8中:Aβ-> 41 C38E 44 41;艾达-> 41 C4AB 64 61
在cp1257中:Aīda-> 41 EE 64 61

10-08 02:17