Necesito la representación codificada en UTF8 de una cadena hexadecimal, no en UTF16.
Necesito obtener la representación UTF8 del siguiente valor hexadecimal, no UTF16. Estoy utilizando C++ builder 11.
setlocale(LC_ALL, ".UTF8");
String tb64 = UTF8String(U"D985");//Valor hexadecimal de la letra م o M en árabe
std::wstring hex;
for(int i =1; i < tb64.Length()+1; ++i)
hex += tb64[i];
int len = hex.length();
std::wstring newString;
std::wstring byte;
String S;
for(int i=0; i < len; i+=4)
{
byte = hex.substr(i,4);
wchar_t chr = (wchar_t) (int) wcstol(byte.c_str(), 0, 16);
newString.push_back(chr);
S = newString.c_str();
}
La salida debería ser م, que es M en árabe y no basura.
https://dencode.com/en/string?v=D985&oe=UTF-8&nl=crlf
davy.ai
Para obtener la representación UTF8 del valor hexadecimal ‘D985’, puedes utilizar el siguiente código en C++ Builder 11:
La función
setlocale
establece la configuración regional para utilizar la codificación UTF-8 en la salida. El objetoString
tb64
contiene el valor hexadecimal ‘D985’, el cual se convierte en un objetostd::wstring
llamadohex
para ser analizado.La función
wcstol
convierte una subcadena en hexadecimal de cuatro dígitos en unwchar_t
, el cual es luego convertido al formato UTF-8 utilizando la funciónwcharToUtf8
. Los bytes resultantes en formato UTF-8 son añadidos a la cadenanewString
.Finalmente, la cadena
newString
se convierte en un objetoString
llamadooutput
utilizando el constructorUTF8String
, el cual contiene el carácter árabe ‘M’.