0

Windows クライアント ソフトウェアから http POST パッケージを受け取る php スクリプトを作成しました。

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);
}

多分あなたはいくつかのアイデアを持っています:)ありがとう

4

3 に答える 3

3

Windows wchar_t は UTF-16LE ですので、試してみてください$u8str = iconv('UTF-16LE', 'UTF-8', $input);

しかし、私が WinHttpClient サイトで見ることができるものから、_b_strバイトに変換できるクラスがあります - それが UTF-8 経由であるかどうかはわかりませんが、他のすべてが失敗した場合は、コードページでWideCharToMultiByte()を使用CP_UTF8して取得できますPOST に適したバイト バッファ。

于 2013-01-10T16:37:13.827 に答える
1

問題は、PHP ファイルでメッセージを受信することですが、"®" 記号のようないくつかの記号が "®" として表示されることです。

つまり、既に ISO-8859-1/Windows-1252 で UTF-8 が誤って解釈されていることを意味します。

こんな感じなら

<?php

echo $rsymbol; //Comes out as ®

次に、変更する必要があるのは次のとおりです。

<?php
header("Content-Type: text/html; charset=UTF-8");
echo $rsymbol; //Comes out as ®
于 2013-01-11T11:53:58.733 に答える
1

これは、wchar_t で取得した文字列全体を UTF-8 に変換するために使用するのに適した PHP 関数です。http://php.net/manual/en/function.mb-convert-encoding.php - PHP 情報を使用して、お使いの PHP のバージョンはマルチバイト文字列をサポートしています。

MultiByte ライブラリは、mb_detect_encoding() を使用してもエンコーディングがわからない場合や、mb_check_encoding() を使用して文字列が特定のエンコーディングであることを検証するのに役立ちます。

于 2013-01-10T16:48:39.580 に答える