我写了一个 php 脚本,它从 windows 客户端软件接收 http POST 包。
Windows 客户端对 C++ 使用“WinHttpClient”。
WinHttpClient 将我发送的消息作为 wchar_t。
现在的问题是,我收到了我的 PHP 文件中的消息,但是一些符号(如“®”符号)显示为“®”。
据我所知,我无法将客户端的字符集更改为 utf-8 或类似的字符集。 但也许这里有些人知道如何将宽字符“转换”为 PHP 可以正常工作的 utf8。因为我必须将数据保存到仅使用 utf-8 运行的数据库中。
我用下面的方法试过了,但它没有改变:(
function ewchar_to_utf8($matches) {
$ewchar = $matches[1];
$binwchar = hexdec($ewchar);
$wchar = chr(($binwchar >> 8) & 0xFF) . chr(($binwchar) & 0xFF);
return iconv("unicodebig", "utf-8", $wchar);
}
function special_unicode_to_utf8($str) {
return preg_replace_callback("/\\\u([[:xdigit:]]{4})/i", "ewchar_to_utf8", $str);
}
也许你有一些想法 :) 谢谢
最佳答案
Windows wchar_t 是 UTF-16LE,所以试试 $u8str = iconv('UTF-16LE', 'UTF-8', $input);
但据我在 WinHttpClient 站点上看到的,它有一个 _b_str
类,因此您可以转换为字节 - 它没有说明是否通过 UTF-8,但如果所有其他方法都失败你可以使用 WideCharToMultiByte()使用 CP_UTF8
代码页获取合适的字节缓冲区以进行 POST。
关于php - wchar_t 到 PHP UTF8 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259308/