Unicode 带有子/上标字符的问题(TouchGFX)

Unicode 带有子/上标字符的问题(TouchGFX),unicode,touch,stm32,stm32f7,Unicode,Touch,Stm32,Stm32f7,我需要下标/上标字符来正确显示O₂,一氧化碳₂, m²,m³ 上标字符正在工作(m³,…没问题),但如果我想有下标2,要么显示器只显示“O”,而不是O₂ 或者O后面的一个“象形文字”字母 我检查了通配符范围,它是0x02到0x2084。下标2的Unicode是0x2082。 我添加了₂ 也可以转换为通配符 我的代码: void Screen1View::button_down_clicked() { Unicode::UnicodeChar list[] = {0xB2, 0};

我需要下标/上标字符来正确显示O₂,一氧化碳₂, m²,m³

上标字符正在工作(m³,…没问题),但如果我想有下标2,要么显示器只显示“O”,而不是O₂ 或者O后面的一个“象形文字”字母

我检查了通配符范围,它是0x02到0x2084。下标2的Unicode是0x2082。
我添加了₂ 也可以转换为通配符

我的代码:

void Screen1View::button_down_clicked()  
{
    Unicode::UnicodeChar list[] = {0xB2, 0};
    counter--;
    Unicode::snprintf(test_textBuffer, TEST_TEXT_SIZE,  "%d m%s", counter, list);  
    test_text.invalidate();  
}
请不要对UnicodeChar列表感到奇怪。我计划在sprintf中添加多个Unicode字符

0xB2是²的Unicode。这很有效。但如果我写入0x2082或0x2083,它将失败


如果有人有想法,请告诉我:)

您可能想使用
Unicode::strncpy()
,因为它允许您将一个Unicode缓冲区复制到另一个Unicode缓冲区。我认为您会有一些未定义的行为,因为Unicode::snprintf希望您遵守指定的格式

我为我的排版指定了下标-2(0x2082)作为通配符,这给了我以下生成的unicode(在
generated/fonts/src/Font\u verdana\u 20\u 4bpp.cpp
中)。请注意,您使用的字体文件必须支持您指定的unicode点

 FONT_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_verdana_20_4bpp[] FONT_LOCATION_FLASH_ATTRIBUTE =
{
...
    0xDF, 0xDF, 0x00, 0xE8, 0xDF, 0x07, 0xDF,
    // Unicode: [0x2082, ]
    0x00, 0x10, 0x00, 0x00, 0xE9, 0xFF, 0x9F, 0x00, 0x9E, 0x55, 0xFA, 0x09, 0x00, 0x00, 0xE0, 0x0D,
    0x00, 0x00, 0xF0, 0x0B, 0x00, 0x00, 0xFB, 0x03, 0x00, 0xC2, 0x4E, 0x00, 0x60, 0xBF, 0x01, 0x00,
    0xFC, 0x6C, 0x66, 0x26, 0xFF, 0xFF, 0xFF, 0x7F
};
并为屏幕1编写了以下代码:

void Screen1View::setupScreen()
{
    Screen1ViewBase::setupScreen();

    Unicode::UnicodeChar buf[2] = {0x2082, 0};
    Unicode::strncpy(textArea1Buffer, buf, 5);  
    textArea1.invalidate();  
}
这在模拟器中为我提供了以下输出:

如果我改为添加通配符“range”,就像您所做的那样:

。。我仍然会生成unicode点的代码:

...
// Unicode: [0x2080, ]
0x00, 0xE8, 0xDF, 0x07, 0x00, 0x80, 0x7F, 0x83, 0x6F, 0x00, 0xE0, 0x09, 0x00, 0xCC, 0x00, 0xF1,
0x06, 0x00, 0xF9, 0x00, 0xF2, 0x05, 0x00, 0xF8, 0x00, 0xF2, 0x06, 0x00, 0xF9, 0x00, 0xF0, 0x09,
0x00, 0xCC, 0x00, 0x80, 0x6F, 0x83, 0x5F, 0x00, 0x00, 0xE8, 0xDF, 0x06, 0x00,
// Unicode: [0x2081, ]
0x00, 0xD2, 0x0C, 0x00, 0xF2, 0xFF, 0x0C, 0x00, 0x20, 0xD2, 0x0C, 0x00, 0x00, 0xC0, 0x0C, 0x00,
0x00, 0xC0, 0x0C, 0x00, 0x00, 0xC0, 0x0C, 0x00, 0x00, 0xC0, 0x0C, 0x00, 0x20, 0xD2, 0x2C, 0x02,
0xF1, 0xFF, 0xFF, 0x0E,
// Unicode: [0x2082, ]
0x00, 0x10, 0x00, 0x00, 0xE9, 0xFF, 0x9F, 0x00, 0x9E, 0x55, 0xFA, 0x09, 0x00, 0x00, 0xE0, 0x0D,
0x00, 0x00, 0xF0, 0x0B, 0x00, 0x00, 0xFB, 0x03, 0x00, 0xC2, 0x4E, 0x00, 0x60, 0xBF, 0x01, 0x00,
0xFC, 0x6C, 0x66, 0x26, 0xFF, 0xFF, 0xFF, 0x7F,
// Unicode: [0x2083, ]
0x00, 0x00, 0x00, 0x00, 0xD7, 0xFF, 0xBF, 0x02, 0xAC, 0x46, 0xF7, 0x0D, 0x01, 0x00, 0xA0, 0x0F,
0x00, 0x11, 0xE4, 0x09, 0x00, 0xFF, 0xAF, 0x01, 0x00, 0x44, 0xD6, 0x1E, 0x00, 0x00, 0x60, 0x4F,
0x9E, 0x67, 0xE8, 0x1E, 0xD9, 0xFF, 0xAE, 0x02,
// Unicode: [0x2084, ]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x0C, 0x00, 0x00, 0x10, 0xFE, 0x0C, 0x00, 0x00,
0xC0, 0xBC, 0x0C, 0x00, 0x00, 0xEA, 0xA1, 0x0C, 0x00, 0x70, 0x2F, 0xA0, 0x0C, 0x00, 0xF2, 0x05,
0xA0, 0x0C, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x05, 0x30, 0x33, 0xC3, 0x3C, 0x01, 0x00, 0x00, 0xB0,
0x0C, 0x00

你试过我的建议了吗?对不起,我上周休假了。我今天就试试。谢谢!:)很高兴它起作用了。如果答案中有任何不清楚的地方,请告诉我,我将对其进行编辑。这是一个常见的错误,所以最好的答案是..我的错误是,我使用了错误的字体。真蠢。