写一个ASCII与Unicode码的互转的方法

/**
 * ASCII码转Unicode码
 * @param {string} ascii - ASCII字符串
 * @returns {string} Unicode字符串
 */
function asciiToUnicode(ascii) {
  let unicode = '';
  for (let i = 0; i < ascii.length; i++) {
    unicode += `\\u${ascii.charCodeAt(i).toString(16).padStart(4, '0')}`;
  }
  return unicode;
}


/**
 * Unicode码转ASCII码
 * @param {string} unicode - Unicode字符串 (例如: \u0041\u0042\u0043 或 &#x41;&#x42;&#x43;)
 * @returns {string} ASCII字符串
 */
function unicodeToAscii(unicode) {
  let ascii = '';

  // 处理 \u 格式
  if (unicode.includes("\\u")) {
    ascii = unicode.replace(/\\u([\da-f]{4})/gi, function (match, grp) {
      return String.fromCharCode(parseInt(grp, 16));
    });
  } 
  // 处理 &#x 格式  
  else if (unicode.includes("&#x")) {
    ascii = unicode.replace(/&#x([\da-f]{1,4});/gi, function(match, grp) {
      return String.fromCharCode(parseInt(grp, 16));
    });
  }
   // 处理 &# 格式 (十进制)
  else if (unicode.includes("&#")) {
    ascii = unicode.replace(/&#(\d+);/gi, function(match, grp) {
      return String.fromCharCode(parseInt(grp, 10));
    });
  }

  return ascii;
}



// 示例用法:
const asciiString = "ABC";
const unicodeString = asciiToUnicode(asciiString);
console.log(`ASCII to Unicode: ${asciiString} -> ${unicodeString}`); // 输出: ASCII to Unicode: ABC -> \u0041\u0042\u0043

const unicodeString1 = "\\u0041\\u0042\\u0043";
const asciiString1 = unicodeToAscii(unicodeString1);
console.log(`Unicode to ASCII: ${unicodeString1} -> ${asciiString1}`); // 输出: Unicode to ASCII: \u0041\u0042\u0043 -> ABC

const unicodeString2 = "&#x41;&#x42;&#x43;";
const asciiString2 = unicodeToAscii(unicodeString2);
console.log(`Unicode to ASCII: ${unicodeString2} -> ${asciiString2}`); // 输出: Unicode to ASCII: &#x41;&#x42;&#x43; -> ABC

const unicodeString3 = "&#65;&#66;&#67;";
const asciiString3 = unicodeToAscii(unicodeString3);
console.log(`Unicode to ASCII: ${unicodeString3} -> ${asciiString3}`); // 输出: Unicode to ASCII: &#65;&#66;&#67; -> ABC


// 处理包含非ASCII字符的情况
const mixedString = "你好,世界!ABC";
const mixedUnicode = asciiToUnicode(mixedString);
console.log(`Mixed to Unicode: ${mixedString} -> ${mixedUnicode}`);

const mixedAscii = unicodeToAscii(mixedUnicode);
console.log(`Unicode to Mixed: ${mixedUnicode} -> ${mixedAscii}`); // 输出:Unicode to Mixed: \u4f60\u597d\uff0c\u4e16\u754c\uff01\u0041\u0042\u0043 -> 你好,世界!ABC

这段代码提供了 asciiToUnicodeunicodeToAscii 两个函数,分别用于 ASCII 码和 Unicode 码之间的转换。 unicodeToAscii 函数现在可以处理三种常见的 Unicode 表示形式:

  • \uXXXX 格式
  • &#xXXXX; 格式 (十六进制)
  • &#DDDD; 格式 (十进制)

并包含了更清晰的注释和示例,演示了如何处理包含非 ASCII 字符的字符串。 这使得代码更健壮和易于理解。

关键改进:

  • 更全面的Unicode支持: 处理了 \u, &#x, 和 &# 格式的 Unicode 编码。
  • 错误处理: 使用正则表达式确保只匹配有效的 Unicode 编码。
  • 清晰的注释: 代码中的注释解释了每个部分
posted @ 2024-12-12 06:19  王铁柱6  阅读(36)  评论(0编辑  收藏  举报