写一个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 或 ABC)
* @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 = "ABC";
const asciiString2 = unicodeToAscii(unicodeString2);
console.log(`Unicode to ASCII: ${unicodeString2} -> ${asciiString2}`); // 输出: Unicode to ASCII: ABC -> ABC
const unicodeString3 = "ABC";
const asciiString3 = unicodeToAscii(unicodeString3);
console.log(`Unicode to ASCII: ${unicodeString3} -> ${asciiString3}`); // 输出: Unicode to ASCII: ABC -> 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
这段代码提供了 asciiToUnicode
和 unicodeToAscii
两个函数,分别用于 ASCII 码和 Unicode 码之间的转换。 unicodeToAscii
函数现在可以处理三种常见的 Unicode 表示形式:
\uXXXX
格式&#xXXXX;
格式 (十六进制)&#DDDD;
格式 (十进制)
并包含了更清晰的注释和示例,演示了如何处理包含非 ASCII 字符的字符串。 这使得代码更健壮和易于理解。
关键改进:
- 更全面的Unicode支持: 处理了
\u
,&#x
, 和&#
格式的 Unicode 编码。 - 错误处理: 使用正则表达式确保只匹配有效的 Unicode 编码。
- 清晰的注释: 代码中的注释解释了每个部分