如何正确显示中文,韩文,日文特殊字符

时间:2019-02-28 05:06:27

标签: c++ qt

我对显示中文,韩文,日文字符有疑问。 我正在使用ID3Tag lib C ++获取一些mp3文件的元数据。但是,某些文件名是韩文字符,显示的标题名称错误。 例如:

id3_utf16_t *tmp = id3_ucs4_utf16duplicate(id3_field_getstrings(f,0));
if (NULL != tmp)
{
     str.append(QString::fromUtf16(tmp));
     LOG << str;
}

str的输出为:"³ª·Î ¸»ÇÒ °Í °°À¸¸é" 但实际上标题名称是:"나로 말할 것 같으면"

那么如何正确显示特殊字符?

谢谢

2 个答案:

答案 0 :(得分:0)

使用此website,我将粘贴的输出转换为十六进制。然后将其转换为UTF-16LE。在此之后,它们是朝鲜语字符,但不完全是您发布的字符。我认为韩语可以将可能不是这样的字符组合在一起。

编辑以删除错误答案

答案 1 :(得分:0)

如果解释为EUC-KR字符串,则输出正确。

# echo "³ª·Î ¸»ÇÒ °Í °°À¸¸é" | iconv -f utf8 -t latin1 | iconv -f EUC-KR -t utf8
나로 말할 것 같으면

Live demo

所以我对发生的事情的有根据的猜测如下:

  1. 该日志文件被编码为EUC-KR(2字节编码)。
  2. 您正在使用一种认为它是Latin-1(1字节编码)的工具(编辑器,终端等)来查看它。
  3. 为什么将日志文件编码为EUC-KR?由于tmp实际上不在UTF-16中,因此它在EUC-KR中。

    # printf '\xb3\xaa\xb7\xce' | iconv -f EUC-KR -t utf-8
    나로
    

    QString无法使用fromUtf16正确转换这些字节。

  4. 为什么在EUC-KR中使用tmp?我不知道。也许文本字段中的编码没有设置,或者设置不正确,所以您的库不知道如何解释它。