如何将日本国旗字符放入字符串?

时间:2014-06-05 02:29:17

标签: javascript unicode emoji

我们正在尝试使用unicode转义创建国家/地区标记列表(以避免在源代码中使用unicode)。我们使用字符来表示标志,以允许用户以明文内容复制/粘贴标记,并避免传输图像文件和死链接的带宽。

如果我记得,在Java中,你必须在处理特殊字符时使用特殊的unicode转义序列。所以我认为它在JS中是一样的。我查找了日本国旗的代码,发现了这个序列:1f1ef 1f1f5(如this document所示,它从一些其他字符集转换为unicode序列)。所以我认为编写字符串的方式是"\u1f1ef\u1f1f5",但返回"἞f἟5"。我错过了什么?

3 个答案:

答案 0 :(得分:1)

我知道这是一个老问题。但是,以下实现可能对将来的读者有用。解决方案在ECMAScript 2015中运行。

def get_queryset(self, request):
    queryset = super(ArticleSetAdmin, self).get_queryset(request)
    return queryset.select_related('attributes__masterdata_type')

答案 1 :(得分:0)

评论太小了也发布了这个:

<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBSRXhpZgAASUkqAAgAAAABAGmHBAABAAAAGgAAAAAAAAABAIaSAgAdAAAALAAAAAAAAABMRUFEIFRlY2hub2xvZ2llcyBJbmMuIFYxLjAxAGf/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAUAB4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2uzsrZrOBzbxEmJScoPTrXHeI/HuiaDfNZR6cl3cRj95tVVVT6Z9fwrurMZ063/64r/Kvnjxjot7o/iK9+1xMI5pnlimx8rqxJ6+vPNc2KqThFOB7WR4PD4uu44h7LRXtc9j8K+I9F8UwSNb2scc8WN8EiLuUHvx1FaGuW8EVijRQxo3mAEqoBwQa84+E2iXw1abVniaK0ERiVmGPMJIPHqBjrXpniH/kHx/9dR/I1dCcp005bnNmuHpYfFSp0XeK/DyM2HXbqGFI1SIhFCgkHOB+NOfXriQYe3tmHuhP9aKK2POvYVfEF0owsNuB6BT/AI1XvdVnvoRFKkaqG3fKD7+/vRRQB//Z" />

fiddle

答案 2 :(得分:0)

问题是因为有问题的字符必须表示为Unicode代理。您可以使用以下函数来获取正确的编码值:

function toUTF16(codePoint) {
    var TEN_BITS = parseInt('1111111111', 2);
    function u(codeUnit) {
        return '\\u'+codeUnit.toString(16).toUpperCase();
    }

    if (codePoint <= 0xFFFF) {
        return u(codePoint);
    }
    codePoint -= 0x10000;

    // Shift right to get to most significant 10 bits
    var leadSurrogate = 0xD800 + (codePoint >> 10);

    // Mask to get least significant 10 bits
    var tailSurrogate = 0xDC00 + (codePoint & TEN_BITS);

    return u(leadSurrogate) + u(tailSurrogate);
}

样品:

> toUTF16(0x1f1ef)
"\uD83C\uDDEF" // this is ''

请参阅Unicode in JS的进一步参考。

相关问题