PHP前端开发

javascript 字符串转 uxxxx

百变鹏仔 2个月前 (10-31) #前端问答
文章标签 字符串

unicode 是计算机科学中用于字符编码的标准之一,它定义了用数字表示字符的方法。在 unicode 中,每一个字符都有一个对应的数字。这个数字被称为 unicode 码点,它通常用 16 进制表示。

在 JavaScript 中,当我们需要使用 Unicode 码点来表示一些特殊字符时,通常会将其表示为 uXXXX 的形式。其中,XXXX 是一个 4 位的 16 进制数,表示对应字符的 Unicode 码点。

如果我们有一串字符串,而其中包含了一些特殊字符,我们可以将这些字符转换为对应的 Unicode 码点。JavaScript 中提供了一些内置方法来完成这个任务。

1. String.charCodeAt()

String.charCodeAt() 方法可以返回字符串中指定位置的字符的 Unicode 码点。例如:

let str = "hello world";console.log(str.charCodeAt(0)); // 104,h 的 Unicode 码点是 104

我们可以使用一个循环将整个字符串遍历一遍,并将每一个字符的 Unicode 码点转换为 uXXXX 的形式。例如:

立即学习“Java免费学习笔记(深入)”;

let str = "hello world";let unicodeStr = "";for (let i = 0; i < str.length; i++) {  // 将每一个字符的 Unicode 码点转换为 4 位的 16 进制数,然后补 0,最后拼接到结果字符串中  unicodeStr += "\u" + ("0000" + str.charCodeAt(i).toString(16)).slice(-4);}console.log(unicodeStr); // u0068u0065u006cu006cu006fu0020u0077u006fu0072u006cu0064

2. String.codePointAt()

String.codePointAt() 方法可以返回字符串中指定位置的字符的 Unicode 码点,与 String.charCodeAt() 不同的是,它可以正确处理大于 16 位的 Unicode 码点。例如:

let str = "?";console.log(str.charCodeAt(0)); // 55362,这个码点需要使用 2 个 16 进制数表示,而 charCodeAt() 返回的是第一个 16 进制数的码点console.log(str.codePointAt(0)); // 134071,codePointAt() 返回整个码点

使用 String.codePointAt() 方法转换字符串中所有的字符为 Unicode 码点,则可以按照类似上面的方式进行遍历:

let str = "hello ??? world";let unicodeStr = "";for (let i = 0; i < str.length; i++) {  let codePoint = str.codePointAt(i);  // 如果该字符是大于 16 位的 Unicode 码点,则需要分组转换  if (codePoint > 0xffff) {    i++; // 需要跳过下一个位置    // 将码点的高 16 位和低 16 位分别转换为 4 位的 16 进制,然后拼接到结果字符串中    unicodeStr += "\u" + ("0000" + (codePoint >> 16).toString(16)).slice(-4) +      "\u" + ("0000" + (codePoint & 0xffff).toString(16)).slice(-4);  } else {    // 将码点转换为 4 位的 16 进制数,然后补 0,最后拼接到结果字符串中    unicodeStr += "\u" + ("0000" + codePoint.toString(16)).slice(-4);  }}console.log(unicodeStr); // u0068u0065u006cu006cu006fu0020ud842udfb7ud842udfb7ud842udfb7u0020u0077u006fu0072u006cu0064

上面的代码中,我们首先判断当前字符的码点是否大于 16 位,如果是,则需要将其高 16 位和低 16 位分别进行转换,然后拼接到结果字符串中。如果不大于 16 位,则直接将其转换为 4 位的 16 进制数,然后拼接到结果字符串中。

总结来说,JavaScript 中可以使用 String.charCodeAt() 和 String.codePointAt() 方法来将字符串中的字符转换为 Unicode 码点,并使用 uXXXX 的形式表示。如果字符串中包含了大于 16 位的 Unicode 码点,则需要使用 String.codePointAt() 方法进行转换,并将其高 16 位和低 16 位分别转换为 4 位的 16 进制数。