es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener la representación UTF8 del valor hexadecimal ‘D985’, puedes utilizar el siguiente código en C++ Builder 11:

    setlocale(LC_ALL, ".UTF8");
    String tb64 = UTF8String(U"D985");
    
    std::wstring hex;
    for(int i =1; i < tb64.Length()+1; ++i)
        hex += tb64[i];
    
    int len = hex.length();
    std::string newString;
    std::wstring byte;
    
    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);
        char utf8[5];
        wcharToUtf8(utf8, chr);
        newString.append(utf8);
    }
    
    // Salida: 'م' (M en árabe)
    String output = UTF8String(newString.c_str());
    

    La función setlocale establece la configuración regional para utilizar la codificación UTF-8 en la salida. El objeto String tb64 contiene el valor hexadecimal ‘D985’, el cual se convierte en un objeto std::wstring llamado hex para ser analizado.

    La función wcstol convierte una subcadena en hexadecimal de cuatro dígitos en un wchar_t, el cual es luego convertido al formato UTF-8 utilizando la función wcharToUtf8. Los bytes resultantes en formato UTF-8 son añadidos a la cadena newString.

    Finalmente, la cadena newString se convierte en un objeto String llamado output utilizando el constructor UTF8String, el cual contiene el carácter árabe ‘M’.

Comments are closed.