为什么此代码显示不正确的Unicode?

时间:2019-09-04 22:03:40

标签: javascript unicode

以下最小代码创建一个包含狗表情符号和红色心形表情符号的字符串。然后用爪子刺穿绳子,露出第二个表情符号,红色的心。为什么显示黑心(在Firefox上)?

var u='\ud83d\udc0e\u2764';
var count=0;
for (let point of u)
    if (count++)
        alert(u+": "+point);

1 个答案:

答案 0 :(得分:2)

from PIL import Image, ImageDraw, ImageFont, ImageFilter import textwrap #configuration font_size=36 width=3840 height=390 back_ground_color=(255,255,255) font_size=80 font_color=(0,0,0) text = " وأيضا هذا النصح محبوب جدا جدا لذلك انا أفضلههذا النص مكتوب باللغةمكتوب باللغةمكتوب باللغةمكتوب باللغةمكتوب باللغة مكتوب باللغة العربية وهو واضح بشكل جميل" wrapped = textwrap.fill(text, 100) im = Image.new ( "RGB", (width,height), back_ground_color ) draw = ImageDraw.Draw ( im ) unicode_font = ImageFont.truetype("Sahel.ttf", font_size) draw.text ( (0,0), wrapped, font=unicode_font, fill=font_color,spacing=30,direction='rtl',align='right',features='rtla') im.save('text.png') 早于彩色表情符号,因此当单独使用它时,它就是黑色的心脏。要使其变为红色,请与U+2764 HEAVY BLACK HEART一起加入,例如:

U+FE0F VARIATION SELECTOR-16

但是,您的var u='\ud83d\udc0e\u2764\ufe0f'; 循环将忽略for并仍然仅显示\ufe0f,因为它们是单独的代码点。

调整循环以查看\u2764之后的下一个代码点,如果它是变量选择器,则将其包括在内:

u