You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32+TouchGFX显示西里尔文、希伯来文出现问号问题求助

解决TouchGFX代码传递西里尔文/希伯来文显示问号的问题

问题根源

TouchGFX的文本组件(如TextArea)采用UTF-16 Unicode编码处理文本,而你代码中定义的const char*是UTF-8窄字符编码。直接用Unicode::strncpy从窄字符数组拷贝时,多字节的非ASCII字符会被错误解析,最终显示问号。而TouchGFX GUI编辑器会自动将输入文本转换为正确的Unicode格式,因此能正常显示。

解决方案

1. 将字符串数组改为Unicode宽字符类型

把原有的const char*数组替换为const Unicode::UnicodeChar*,并在字符串字面量前添加u前缀(表示UTF-16宽字符):

const Unicode::UnicodeChar* parArea4[5][6] = {
    { u"Preheating", u"Ready", u" ", u"Baking", u"Extra time", u"Extra time?" },
    { u"Preriscaldo", u"Pronto", u" ", u"Cottura", u"Extra time", u"Extra time?" },
    { u"Prechauffage", u"Pret", u" ", u"Cuisson", u"Extra time", u"Extra time?" },
    { u"Предварительный нагрев", u"Готовый", u" ", u"Выпечка", u"дополнительное время", u"дополнительное время?" },
    { u"חימום מוקדם", u"מוּכָן", u" ", u"אֲפִיָה", u"זמן נוסף", u"זמן נוסף" }
};

2. 修正文本拷贝逻辑

现在数组元素是Unicode::UnicodeChar*,直接使用Unicode::strncpy即可正确拷贝宽字符,建议用TouchGFX自动生成的缓冲区大小常量代替strlen+1,避免越界:

textArea4.setColor(touchgfx::Color::getColorFrom24BitRGB(236, 209, 18));
Unicode::strncpy(textArea4Buffer, parArea4[tipolingua][5], textArea4BufferSize);
textArea4.invalidate();

3. 希伯来文额外设置:开启从右到左显示

希伯来文是RTL(从右到左)语言,需要给TextArea设置对应文本方向,可根据语言索引动态切换:

if (tipolingua == 4) { // 希伯来文对应的数组索引
    textArea4.setTextDirection(touchgfx::TEXT_DIRECTION_RTL);
} else {
    textArea4.setTextDirection(touchgfx::TEXT_DIRECTION_LTR);
}

4. 确认字体支持目标字符

虽然你在GUI中能正常显示,仍需确保当前TextArea使用的字体包含西里尔文和希伯来文的字符集。可在TouchGFX Designer中检查字体的字符覆盖范围,必要时重新生成字体文件。

内容的提问来源于stack exchange,提问作者enomis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:15:16