Я пытаюсь отправить бенгальский текст в виде смс с помощью нашего местного оператора API. Но они не поддерживают текст Unicode (utf-8) в качестве параметра post / get. они ответили это:
Для каждого бенгальского алфавита есть стандартное представление HEXDUMP
которые должны быть вставлены в часть содержимого сообщения.Как ниже слово бенгальский имеет представление ниже HEXDUMP
বাংলাদেশ: 09AC09BE098209B209BE09A609C709B6
Итак, я попробовал следующие два кода, собранные из SO.
Код-1:
$strBN = 'বাংলাদেশ';
echo bin2hex($strBN);
//it reutrns this value "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"
Code-2:
$strBN = 'বাংলাদেশ';
echo fToHex($strBN);
function fToHex($string)
{
$strHData = '';
for ($i = 0; $i < strlen($string); $i++)
{
$strHData .= str_pad(dechex(ord($string[$i])), 2, '0', STR_PAD_LEFT);
}
return $strHData;
}
//This also return same value as above "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"
Итак, мой вопрос, как я могу преобразовать этот текст / строку в hexdump, как ожидал мой носитель.
Получаемый шестнадцатеричный дамп — это формат UTF-8, который позволяет надежно представлять символы Юникода в 8-битном потоке.
E0 A6 AC E0 A6 BE E0 A6 82 E0 A6 B2 E0 A6 BE E0 A6 A6 E0 A7 87 E0 A6 B6
Пример, с другой стороны, представляет собой дамп значений UTF-16 (или усеченного 16-битного кода Unicode):
09AC 09BE 0982 09B2 09BE 09A6 09C7 09B6
В вашем случае решение заключается в преобразовании в кодировку UTF-16:
echo bin2hex(mb_convert_encoding('বাংলাদেশ', 'UTF-16'));"> 09ac09be098209b209be09a609c709b6
Обратите внимание, что использование символов Unicode в коде ненадежно, потому что интерпретация байтов в строке будет зависеть от деталей вашей системы / настроек редактора / компилятора или интерпретатора и т. Д.
Других решений пока нет …