我有问题我的拉脱维亚语数据库中有一些数据(即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