"Red Heart ❤️" ncurses 中的 unicode 字符
"Red Heart ❤️" unicode character in ncurses
目前使用 WSL2、C++20,带有预处理器指令 #define _XOPEN_SOURCE_EXTENDED 1
、#include <panel.h>
和标志 -lpanelw -lncursesw
。
当我尝试在 ncurses 中添加“红心❤️”字符时使用下面提供的代码,它会导致终端出现奇怪的错误 window,尤其是当我用盒子包裹它时。我的 MacBook 也遇到了同样的问题。当我将 unicode 字符放入字符串 "❤️"
中时,它会给出 const char[7]
,这与给出 const char[5]
的许多其他 unicode 字符相反。这可能与错误的原因有关吗?如果有人能给我一些关于这个问题的见解,我将不胜感激。
(忽略部分图片右下角的光标,那只是VS Code终端的光标问题)
1 颗红心:
2 颗红心:
2 颗紫心勋章:
代码:
#define _XOPEN_SOURCE_EXTENDED 1
#include <panel.h>
#include <iostream>
int main() {
setlocale(LC_ALL, "");
initscr();
raw();
noecho();
curs_set(0);
refresh();
WINDOW *win {newwin(8, 16, 10, 10)};
box(win, 0, 0);
mvwaddwstr(win, 1, 1, L"❤️");
mvwaddwstr(win, 1, 5, L"❤️");
wrefresh(win);
getch();
endwin();
}
您使用的“字”“❤️”其实不是一个字。它由两个 Unicode 字符“❤”(U+2764) 和一个修饰符 U+FE0F“VARIATION SELECTOR-16”组成,它给出了表情符号的红色样式。
您可以通过在 WSL 控制台中键入 echo -n ❤️ | hexdump -C
来验证字符串的编码形式,它应该输出
00000000 e2 9d a4 ef b8 8f |......|
00000006
或 Python,
In [1]: heart="❤️"
In [2]: len(heart)
Out[2]: 2
In [3]: hex(ord(heart[0]))
Out[3]: '0x2764'
In [4]: hex(ord(heart[1]))
Out[4]: '0xfe0f'
更多关于 Variation Selectors。
目前使用 WSL2、C++20,带有预处理器指令 #define _XOPEN_SOURCE_EXTENDED 1
、#include <panel.h>
和标志 -lpanelw -lncursesw
。
当我尝试在 ncurses 中添加“红心❤️”字符时使用下面提供的代码,它会导致终端出现奇怪的错误 window,尤其是当我用盒子包裹它时。我的 MacBook 也遇到了同样的问题。当我将 unicode 字符放入字符串 "❤️"
中时,它会给出 const char[7]
,这与给出 const char[5]
的许多其他 unicode 字符相反。这可能与错误的原因有关吗?如果有人能给我一些关于这个问题的见解,我将不胜感激。
(忽略部分图片右下角的光标,那只是VS Code终端的光标问题)
1 颗红心:
2 颗红心:
2 颗紫心勋章:
代码:
#define _XOPEN_SOURCE_EXTENDED 1
#include <panel.h>
#include <iostream>
int main() {
setlocale(LC_ALL, "");
initscr();
raw();
noecho();
curs_set(0);
refresh();
WINDOW *win {newwin(8, 16, 10, 10)};
box(win, 0, 0);
mvwaddwstr(win, 1, 1, L"❤️");
mvwaddwstr(win, 1, 5, L"❤️");
wrefresh(win);
getch();
endwin();
}
您使用的“字”“❤️”其实不是一个字。它由两个 Unicode 字符“❤”(U+2764) 和一个修饰符 U+FE0F“VARIATION SELECTOR-16”组成,它给出了表情符号的红色样式。
您可以通过在 WSL 控制台中键入 echo -n ❤️ | hexdump -C
来验证字符串的编码形式,它应该输出
00000000 e2 9d a4 ef b8 8f |......|
00000006
或 Python,
In [1]: heart="❤️"
In [2]: len(heart)
Out[2]: 2
In [3]: hex(ord(heart[0]))
Out[3]: '0x2764'
In [4]: hex(ord(heart[1]))
Out[4]: '0xfe0f'
更多关于 Variation Selectors。