为什么我不能使用Symbola字体在Pebble上显示表情符号?

时间:2013-12-29 20:58:55

标签: c emoji pebble-watch

我将Symbola font添加到我的手表应用程序中,并尝试在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);
}

2 个答案:

答案 0 :(得分:1)

documentationtext_layer_set_text

的论点说
  

要设置到TextLayer上的新文本。这必须是以null结尾且有效的UTF-8字符串!

(请注意感叹号)。 “Unicode”不是有效的C字符串编码,但“UTF-8”是。将图标的Unicode值作为UTF-8字符插入应该有效。

修改

等待 - 您已将字符U + 1F601编码为UTF-8。根据{{​​3}}, 是您字体中的有效字符。

答案 1 :(得分:1)

您是否在字体资源清单中指定了characterRegex中的那些表情符号字符?

我也看到有一个fontgen.py补丁在这里包含unicode这可能会对你有帮助。

https://github.com/fisakov/pebble-sdk-characterRegex