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
相关产品推荐
相关产品推荐

