1

我正在编写一个假设有 GTK gui 并使用 Windows 注册表操作的工具。例如,我有这样一个回调函数:

static void
msg_INFO(GtkWidget *main_window, gpointer data)
{      
  GtkWidget *dialog = gtk_message_dialog_new(NULL,
      GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, data);
  gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
  gtk_dialog_run(GTK_DIALOG (dialog) );
  gtk_widget_destroy(dialog);
}

手册上写着 GTK+ 支持 Unicode。如果我用 someDATA 作为参数调用这个函数

LPWSTR someDATA = malloc(256);
wcscpy(someDATA,L"Some data here");

弹出窗口将仅显示第一个字符,在这种情况下为“S”。我用谷歌搜索它并发现了一些问题,但使用 python...我不知道如何使用 gtk_message_dialog_new 来实现它,因为我需要在与用户交互期间暂停运行。对不起我的英语不好

4

1 回答 1

3

GTK+ 使用UTF-8,这不是你从L-prefixed 字符串文字中得到的。后者将为您提供一个使用宽字符的字符串,通常为 16 位,因此第一个字符被编码为两个字节。

这些字节中的第二个将是 0,因为 'S' 是一个 ASCII 字符,并且当被视为 UTF-8 时,该零将终止字符串。

于 2012-08-31T09:23:01.363 回答