gpt4 book ai didi

c - 使用 emWin 和韩语字体时显示错误字形

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:24 25 4
gpt4 key购买 nike

我在嵌入式系统上使用 SEGGER emWin

我下载了韩文字体:Korean True Type Font并将字体转换为C语言数据语句。

当我打印文本:한국어(“韩语”)时,没有打印出任何内容。文本的十六进制代码 (UTF-8) 是:\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4

我在 Font Creator 中打开字体,发现偏移 0xED 处的字形与文本中的第一个字形不匹配。此外,偏移量 0xED950x95ED 处没有字形。

我使用 16 位 Unicode 转换了文件。

文本的十六进制代码是通过使用谷歌翻译确定的,然后将文本复制到记事本中,将文本保存为 UTF-8,然后使用十六进制编辑器打开文本文件。

如何获取十六进制字符串以打印适当的字形?

我是否遇到了 Unicode 与 UTF-8 的问题?

编辑 1:
我没有调用任何函数来更改编码,因为我对那部分感到困惑。这是基本代码:

// alphabetize languages for display
static const Languages_t Language_map[] =
{
{"Deutsch", ESG_LANG_German__Deutsch_},
{"English", ESG_LANG_English},
{"Espa\303\361ol", ESG_LANG_Spanish__Espanol_},
{"Fran\303\247ais", ESG_LANG_French__Francais_}, /* parasoft-suppress MISRA2004-7_1 "octal sequence needed for text accents on foreign language text" */
{"Italiano", ESG_LANG_Italian__Italiano_},
{"Nederlands", ESG_LANG_Dutch__Nederlands_},
{"Portugu\303\252s", ESG_LANG_Portuguese__Portugues_}, /* parasoft-suppress MISRA2004-7_1 "octal sequence needed for text accents on foreign language text" */
{"Svenska", ESG_LANG_Swedish__Svenska_},
{"\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4",ESG_LANG_Korean}, // UTF-8
// {"\xFF\xFE\x5c\xD5\x6D\xAD\xB4\xC5", ESG_LANG_Korean}, // Unicode
};

for (index = ESG_LANG_English; index < ESG_LANG_MAX_LANG; index++)
{
if (index == ESG_LANG_Korean)
{
GUI_SetFont(&Font_KTimesSSK22_12pt);
}
else
{
GUI_SetFont(&GUI_FontMyriadPro_Semibold_22pt);
}
if (index == language)
{
GUI_SetColor(ESG_WHITE);
}
else
{
GUI_SetColor(ESG_AMR_BLUE);
}
(void) GUI_SetTextAlign(GUI_TA_HCENTER);
GUI_DispStringAt(Language_map[index].name,
(signed int)Language_position[index].x,
(signed int)Language_position[index].y);
}
//...

void GUI_DispStringAt(const char GUI_UNI_PTR *s, int x, int y) {
GUI_LOCK();
GUI_pContext->DispPosX = x;
GUI_pContext->DispPosY = y;
GUI_DispString(s);
GUI_UNLOCK();
}

GUI_UNI_PTR 不是用于 Unicode,而是用于“通用”:

/* Define "universal pointer". Normally, this is not needed (define will expand to nothing)
However, on some systems (AVR - IAR compiler) it can be necessary ( -> __generic),
since a default pointer can access RAM only, not the built-in Flash
*/
#ifndef GUI_UNI_PTR
#define GUI_UNI_PTR
#define GUI_UNI_PTR_USED 0
#else
#define GUI_UNI_PTR_USED 1
#endif

最佳答案

emWin 运行正常。
系统设置为 UTF-8 编码。

问题是找到一个包含所有韩语字形(位图)的 truetype unicode 字体。许多字体声称支持韩语,但它们的字形对于 unicode 来说位置不对。

关于c - 使用 emWin 和韩语字体时显示错误字形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com