我对中文,韩语,日语角色有问题。我正在使用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的输出为:"³ª·Î ¸»ÇÒ °Í °°À¸¸é"
但是实际上,标题名称为:"나로 말할 것 같으면"
那么如何正确显示特殊字符?
谢谢
使用此网站,我将输出粘贴并转换为十六进制。然后将其转换为UTF-16LE。在那之后,它们是韩国角色,但不完全是您发布的角色。我认为韩国人有一种结合角色的方式。
编辑以删除错误的答案
如果解释为euc-kr字符串,输出是正确的。
# echo "³ª·Î ¸»ÇÒ °Í °°À¸¸é" | iconv -f utf8 -t latin1 | iconv -f EUC-KR -t utf8
나로 말할 것 같으면
实时演示
所以我对正在发生的事情的猜测如下:
- 日志文件被编码为EUC-KR(2字节编码)。
- 您正在使用一种认为是拉丁语1(1字节编码)的工具(编辑,终端等)来查看它。
为什么日志文件编码为EUC-KR?因为
tmp
实际上不是UTF-16中的,所以它在EUC-KR中。# printf 'xb3xaaxb7xce' | iconv -f EUC-KR -t utf-8 나로
QString
不能使用fromUtf16
正确转换这些字节。- 为什么
tmp
在EUC-KR中?我不知道。也许文本字段中的编码未设置或错误设置,因此您的库不知道如何解释。