Javascript 如何放置日本国旗字符🇯🇵;一串?
我们正在尝试使用unicode转义(以避免在源代码中使用unicode)创建一个国家国旗列表。我们使用字符来表示标志,以允许用户在纯文本内容中复制/粘贴标志,并避免传输图像文件和死链接的带宽Javascript 如何放置日本国旗字符🇯🇵;一串?,javascript,unicode,emoji,Javascript,Unicode,Emoji,我们正在尝试使用unicode转义(以避免在源代码中使用unicode)创建一个国家国旗列表。我们使用字符来表示标志,以允许用户在纯文本内容中复制/粘贴标志,并避免传输图像文件和死链接的带宽 如果我还记得,在Java中,在处理特殊字符时必须使用特殊的unicode转义序列。所以我认为JS也是一样的。我查找了日本国旗的代码评论太小太过贴子: <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBSRXhpZgAASUk
如果我还记得,在Java中,在处理特殊字符时必须使用特殊的unicode转义序列。所以我认为JS也是一样的。我查找了日本国旗的代码评论太小太过贴子:
<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" />
和评论太少太多,请发布以下内容:
<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" />
问题是,所讨论的字符必须表示为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(代码点){
变量十位=parseInt('1111111',2);
功能u(代码单元){
返回'\\u'+codeUnit.toString(16.toUpperCase();
}
如果(码点>10);
//掩码以获得最低有效10位
var TAILSURRONATE=0xDC00+(码点和十位);
返回u(引导代理)+u(引导代理);
}
样本:
> toUTF16(0x1f1ef)
"\uD83C\uDDEF" // this is 'I know it's an old question. Though, the following implementation might be useful for future readers. Solution runs in ECMAScript 2015.
// Create flag from country code
function getCountryFlag(cc) {
// Mild sanity check.
if (cc.length !== 2)
return cc;
// Convert char to Regional Indicator Symbol Letter
function risl(chr) {
return String.fromCodePoint(0x1F1E6 - 65 + chr.toUpperCase().charCodeAt(0));
}
// Create RISL sequence from country code.
return risl(cc[0]) + risl(cc[1]);
}
// Test
document.write(getCountryFlag('jp'));
>toUTF16(0x1f1ef)
“\uD83C\uDDEF”//this is'问题在于所讨论的字符必须表示为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(代码点){
变量十位=parseInt('1111111',2);
功能u(代码单元){
返回'\\u'+codeUnit.toString(16.toUpperCase();
}
如果(码点>10);
//掩码以获得最低有效10位
var TAILSURRONATE=0xDC00+(码点和十位);
返回u(引导代理)+u(引导代理);
}
样本:
> toUTF16(0x1f1ef)
"\uD83C\uDDEF" // this is 'I know it's an old question. Though, the following implementation might be useful for future readers. Solution runs in ECMAScript 2015.
// Create flag from country code
function getCountryFlag(cc) {
// Mild sanity check.
if (cc.length !== 2)
return cc;
// Convert char to Regional Indicator Symbol Letter
function risl(chr) {
return String.fromCodePoint(0x1F1E6 - 65 + chr.toUpperCase().charCodeAt(0));
}
// Create RISL sequence from country code.
return risl(cc[0]) + risl(cc[1]);
}
// Test
document.write(getCountryFlag('jp'));
>toUTF16(0x1f1ef)
“\uD83C\uDDEF”//这是“我知道这是个老问题。不过,以下实现可能对未来的读者有用。解决方案在ECMAScript 2015中运行
//从国家代码创建标志
函数getCountryFlag(cc){
//轻度精神检查。
如果(cc.length!==2)
返回cc;
//将字符转换为区域指示器符号字母
函数risl(chr){
返回字符串.fromCodePoint(0x1F1E6-65+chr.toUpperCase().charCodeAt(0));
}
//从国家代码创建RISL序列。
返回risl(cc[0])+risl(cc[1]);
}
//试验
document.write(getCountryFlag('jp'))代码>我知道这是个老问题。不过,以下实现可能对未来的读者有用。解决方案在ECMAScript 2015中运行
//从国家代码创建标志
函数getCountryFlag(cc){
//轻度精神检查。
如果(cc.length!==2)
返回cc;
//将字符转换为区域指示器符号字母
函数risl(chr){
返回字符串.fromCodePoint(0x1F1E6-65+chr.toUpperCase().charCodeAt(0));
}
//从国家代码创建RISL序列。
返回risl(cc[0])+risl(cc[1]);
}
//试验
document.write(getCountryFlag('jp'))代码>浏览器的字体可能没有这些unicode字符。这对潜在用户来说也是一个问题……我想你应该使用🇯🇵yep,我不认为这是我的浏览器,如果你想避免图像使用@vladkras:那么我必须传输3倍于使用普通图像时的数据量,并且失去复制/粘贴能力。我们在目标浏览器上测试了这些标志,这些标志可以正常工作。对于看不到字符的用户,这里有一个解决方案。您浏览器的字体可能没有这些unicode字符。这对潜在用户来说也是一个问题……我想你应该使用🇯🇵yep,我不认为这是我的浏览器,如果你想避免图像使用@vladkras:那么我必须传输3倍于使用普通图像时的数据量,并且失去复制/粘贴能力。我们在目标浏览器上测试了这些标志,它们可以正常工作。这里有一个给看不到字符的人的提示。@Dog你为什么这么认为?看看你的示例,它是一个不同的字符(不是日本标志)。@Dog你描述的序列(1f1f5
)是两个独立的unicode字符,我得到的序列应该是一种特殊的形式,在javascript渲染后显示为标志。你好像要把那个序列的一半分成另一个序列?这是关于两个独立的字符的吗?@Dog您作为注释附加的图片是一个表情符号,您的浏览器会动态地将这些字符转换为表情符号。Unicode中没有日本国旗
字符。@Dog你为什么这么认为?看看你的示例,它是一个不同的字符(不是日本国旗)。@Dog你描述的序列(1f1ef 1F5
)是两个独立的unicode字符,我得到的序列应该是一种特殊的形式,在javascript渲染后显示为标志。你好像要把那个序列的一半分成另一个序列?这是关于两个独立的字符的吗?@Dog您作为注释附加的图片是一个表情符号,您的浏览器会动态地将这些字符转换为表情符号。Unicode中没有日本国旗
字符。