0 👍
21 lượt xem
bởi
Em có mã 2 mã hex:
  • UTF-8 Hex : 4875E1BBB36E68204E67E1BB8D632048C3A0204D79
  • UTF-16 Hex : 004800751EF3006E00680020004E00671ECD00630020004800E00020004D0079
Em muốn viết program C++, chuyển đổi từ UTF-16 Hex -> UTF-8 Hex .
Khi khởi tạo chương trình và nhập vào chuỗi
UTF-16 Hex : 004800751EF3006E00680020004E00671ECD00630020004800E00020004D0079
---> chương trình sẽ chuyển đổi chuỗi trên thành UTF-8 hex như bên dưới
=> UTF-8 Hex : 4875E1BBB36E68204E67E1BB8D632048C3A0204D79

Các anh có giải pháp nào giúp em với ạ.



 

1 Câu trả lời

0 👍
bởi (🏅169)
std::string convertUTF16toUTF8(const uint16_t* utf16Buf)
{
    std::string utf8Str = "";
    uint16_t utf16CodePoint = 0;
 
    // convert (refer to https://en.wikipedia.org/wiki/UTF-8)
    for (utf16Buf; *utf16Buf != 0; ++utf16Buf) {
        utf16CodePoint = *utf16Buf;
 
        // 7 bits codepoint
        if (utf16CodePoint <= 0x007f) {
            // using 1 byte: 0xxxxxxx
            utf8Str.append(1, static_cast<char>(utf16CodePoint));
        } 
        // 11 bits codepoint
        else if (utf16CodePoint <= 0x07ff) {
            // using 2 bytes: 110xxxxx 10xxxxxx
            char byte1 = 0xc0 | ((utf16CodePoint >> 6) & 0x1f);
            char byte2 = 0x80 | (utf16CodePoint & 0x3f);
            utf8Str.append(1, byte1);
            utf8Str.append(1, byte2);
        }
        // 16 bits codepoint
        else {
            // using 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
            char byte1 = 0xe0 | ((utf16CodePoint >> 12) & 0x0f);
            char byte2 = 0x80 | ((utf16CodePoint >> 6) & 0x3f);
            char byte3 = 0x80 | (utf16CodePoint & 0x3f);
            utf8Str.append(1, byte1);
            utf8Str.append(1, byte2);
            utf8Str.append(1, byte3);
        }
    }
 
    return utf8Str;
}
 
bởi
Em cảm ơn anh ạ.

Anh ơi, anh có đoạn nào chạy demo hàm ở trên hông ạ anh, có thể cho em tham khảo với ạ
bởi (🏅169)
e cần 1 cái byte buffer chứa data của UTF16 string rồi pass vào function kia là ra đc string ở UTF8 thôi em
Coding Guru là nơi dành cho cộng đồng lập trình viên Việt Nam hỗ trợ nhau về tất cả các vấn đề liên quan đến công nghệ.

Chúng ta hãy cùng nhau xây dựng một cộng đồng công nghệ Việt Nam mạnh mẽ, thúc đẩy và giúp đỡ nhau cùng phát triển, thăng tiến trong sự nghiệp.

***
Nơi đam mê hội tụ
***

Một số câu hỏi gần đây có thể tương tự hoặc liên quan ↓

0 👍
1 trả lời 59 lượt xem
hỏi bởi quockhanh (🏅0) 29/8/2021
0 👍
1 trả lời 322 lượt xem
hỏi bởi LongHoang (🏅0) 10/11/2020
+1 👍
1 trả lời 907 lượt xem
0 👍
2 trả lời 639 lượt xem
hỏi bởi Longhoang 31/3/2020
0 👍
2 trả lời 865 lượt xem
hỏi bởi ẩn danh 27/2/2020
...