我在 cp1251_general_ci 排序规则中有一个 mysql varchar(50) 行。在 php 中的 mysql_fetch_row 之后,我得到了一个 $string。然后我执行以下操作:
echo mb_detect_encoding($string,'CP1251,UTF-8,Windows-1251'); // echoes Windows-1251
$string = mb_convert_encoding($string, 'UTF-8', 'Windows-1251');
echo mb_detect_encoding($string,'CP1251,UTF-8,Windows-1251'); // again echoes Windows-1251
为什么第二次字符串不是UTF-8?
我也试过
$string = iconv('Windows-1251', 'UTF-8', $string);
但是输出字符集还是 Windows-1251。
在最终结果中,我的文件名中的编码损坏了,其中包含 $string 变量。
如何从 mysql cp1251_general_ci 排序规则(Windows-1251)转换为 UTF-8?
附言
echo $string; \\ echoes ������
echo bin2hex($string); \\ echoes cce5e3e0f4eeed
$string = mb_convert_encoding($string, 'UTF-8', 'Windows-1251');
echo $string; \\ echoes Мегафон
echo bin2hex($string); \\ echoes d09cd0b5d0b3d0b0d184d0bed0bd
但
fopen("../tmp/$string.log", "w");
创建一个文件 .../tmp/????????????????.log (在 linux 中)