我添加了 Symbola font到我的 watch 应用程序,并尝试在 Pebble 上显示一些表情符号,但遗憾的是,没有骰子。
这是我代码中的相关变量和函数……请保持温和,我有点像 C n00b。
这甚至是为 C 字符串格式化 unicode 的正确方法吗?我添加了冒号作为分隔符。
static char emoji_chars[]=":\xF0\x9F\x98\x81:\xF0\x9F\x98\x93:";
void handle_init(AppContextRef ctx) {
(void)ctx;
window_init(&window, "Window Name");
window_stack_push(&window, true /* Animated */);
text_layer_init(&emoji_layer, GRect(30, 30, 150, 50));
text_layer_set_background_color(&emoji_layer, GColorWhite);
text_layer_set_text_color(&emoji_layer, GColorBlack);
text_layer_set_font(&emoji_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_SYMBOLA_24)));
text_layer_set_text(&emoji_layer, emoji_chars);
layer_add_child(&window.layer, &emoji_layer.layer);
}
void pbl_main(void *params) {
resource_init_current_app(&APP_RESOURCES);
PebbleAppHandlers handlers = {
.init_handler = &handle_init
};
app_event_loop(params, &handlers);
}
documentation在 text_layer_set_text
的参数上说
The new text to set onto the TextLayer. This must be a null-terminated and valid UTF-8 string!
(注意感叹号)。 “Unicode”不是有效的 C 字符串编码,但“UTF-8”是。将图标的 Unicode 值作为 UTF-8 字符插入应该可行。
编辑
稍等——您已经将字符 U+1F601 编码为 UTF-8。根据 http://users.teilar.gr/~g1951d/Symbola.pdf,它 是您字体中的有效字符.
我是一名优秀的程序员,十分优秀!