我的老板强迫我在php服务器中使用访问mdb数据库(是的,我很认真)。 我可以连接它并从中检索数据,但是你可以想象,我有编码问题,因为我想使用utf8工作。
问题是现在我有两个“解决方案”将Windows-1252翻译成UTF-8
这是第一种方式:
mb_convert_encoding($string, "UTF-8", "Windows-1252")
。
它有效,但问题是特殊字符未正确转换,例如charº转换为\u00ba
而charÓ转换为\ u00d3。
我的第二种方式是这样做:
mb_convert_encoding(mb_convert_encoding($string, "UTF-8", "Windows-1252"), "HTML-ENTITIES", "UTF-8")
它也有效,但它发生相同,特殊字符未正确转换。 Charº转换为º
有人知道如何正确更改编码,包括特殊字符吗?
或者有人知道如何将º
和\u00ba
转换为可读的内容吗?
答案 0 :(得分:0)
我做了简单的测试,将codepoint转换为字母
<?php
function codepoint_decode($str) {
return json_decode(sprintf('"%s"', $str));
}
$string_with_codepoint = "Ahed \u00d3\u00ba\u00d3";
// $string_with_codepoint = mb_convert_encoding($string, "UTF-8", "Windows-1252");
$output = codepoint_decode($string_with_codepoint);
echo $output; // Ahed ÓºÓ
获得此answer
的信用答案 1 :(得分:0)
我终于找到了解决方案。 我从一开始就有解决方案,但我的测试错误。
我的坏。
为我做这件事的正确方法是mb_convert_encoding($string, "UTF-8", "Windows-1252")
但我正在检查结果:
$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252");
echo json_encode($stringUTF8);
这就是为什么它会返回像\u20ac
这样的unicode字符,如果我愿意的话:
$stringUTF8 = mb_convert_encoding($string, "UTF-8", "Windows-1252");
echo $stringUTF8;
我应该从一开始就看到解决方案,但我错了。是json_encode()
将特殊字符变成unicode字符的原因。
感谢大家的帮助!!