Я пытаюсь прочитать данные с моего онлайн-сервера MySQL, используя WinHttpRequest в VBA.
Dim objHTTP As New WinHttp.WinHttpRequest
With objHTTP
.Open "POST", "http://www.dname.com/ruski/php/getNewestPID.php", True
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=""UTF-8""".Send "PID=" & lngPID
.WaitForResponse
Debug.Print .ResponseText
End With
<?php
$PID = $_POST['PID'];
require_once ('config.php');
if(!$PID>0){
die("##### Error: getNewestPID failed - PID='" . $PID . "' #####");
}
$phrases = mysql_query("SELECT * FROM phrases WHERE (PID > '$PID')");
if(!$phrases){
die("##### Error: getNewestPID SELECT failed - PID=" . $PID . " - " . mysql_error() . " #####");
}
mysql_close($db);
echo "data=";
while($row = mysql_fetch_array($phrases)) {
echo $row[0] . "|" . $row[1] . "|" . $row[2] . "|" . $row[3];
}
?>
Все работает хорошо, но кириллический текст возвращается как:
data = 21361 | 105 || Ð? Ð ° Ð »Ñ? Ñ? ик игÑ? Ð ° еÑ? нР° ÐÐпке в ÐÐоев комнР° Ñ? Ð?
Мой БД использует UTF-8 Unicode. Я знаю, что кириллица работает в таблицах и формах, но просматривает ненужные в редакторе VB.
Я попробовал это:
Set FileStream = CreateObject("ADODB.Stream")
FileStream.Open
FileStream.Type = 1 'Binary
FileStream.Write objHTTP.ResponseBody
FileStream.Position = 0
FileStream.Type = 2 'adTypeText
FileStream.Charset = "Windows-1251" ' https://msdn.microsoft.com/en-us/library/ms526296(v=exchg.10).aspx
strText = FileStream.ReadText
FileStream.Close
заканчивая с мусором в записи:
ВНИМАНИЕ, ЧТОБЫ ОБРАТИТЬСЯ, ЧТОБЫ ОБРАТИТЬСЯ.
Лучший результат с:
mb_convert_encoding ($ row [3], «Windows-1251», «UTF-8»)
Какое-то время в мире.
Задача ещё не решена.
Других решений пока нет …