gpt4 book ai didi

javascript - 在 unicode 字母旁边显示 unicode 重音符号,而不是组合

转载 作者:行者123 更新时间:2023-12-01 01:31:49 25 4
gpt4 key购买 nike

正如标题所述,我正在尝试在字母旁边显示 Unicode 重音符号。

这个任务需要遍历一个字符串,识别一个特殊字符,然后通过打破重音符号和字母并并排显示它们来“简化”它(单词是否正确并不重要,只有格式重要)。

Às --> Aˋs

我已经有了所需的 unicode,所以我不需要识别任何字符。

我试图动态地执行此操作,因此我将所有特殊字符 unicode 和替换 unicode 存储在数组内的对象中。我不是遍历字符串中的每个字符,而是用我想要的新的 unicode 字符组合全局替换特殊字符的每个实例。请参阅下面我当前的代码:

//String to check for special characters
var string_data = "Às simple as this sounds...it is trivial"

//Array of special(incompatible) characters and replacement unicode characters
var unicodeChars = [
{
incompatible_unicode_char: "\u00C0",//À
replace_uni_char_one: "\u0041", //A
replace_uni_char_two: "\u0300" //ˋ
}
];

//Convert property values from unicodeChars objects to readable characters
for(var i = 0; i< unicodeChars.length;i++){
String.fromCharCode(parseInt(unicodeChars[i].incompatible_unicode_char,16));
String.fromCharCode(parseInt(unicodeChars[i].replace_uni_char_one,16));
String.fromCharCode(parseInt(unicodeChars[i].replace_uni_char_two,16));
}

//Iterate through each object in unicodeChars array
for(var i = 0; i<unicodeChars.length;i++){

//Creating a string that holds the value of what to replace the special character with
var replacement_chars = unicodeChars[i].replace_uni_char_one;
if(unicodeChars[i].replace_uni_char_two != null){
replacement_chars = replacement_chars + unicodeChars[i].replace_uni_char_two;
}

//creating regex object in order to globally replace any occurrence of the special character in the string
var regex = new RegExp(unicodeChars[i].incompatible_unicode_char, "g");

//attempting to replace the occurrence
string_data = string_data.replace(regex, replacement_chars);
}

我想要的 string_data 的最终值是:听起来很简单......它很简单

但是这里的问题是当前的最终值是:听起来很简单......它很微不足道

所以 string_data 基本上根本没有改变,但同时它又发生了变化。在调查时,我发现添加字符和重音标记会将它们组合成一个字母。

因此,在我的代码中,当我执行以下操作时: replacement_chars = replacement_chars + unicodeChars[i].replace_uni_char_two; 代码会自动组合 unicodeChars[i].replace_uni_char_two< 中的重音标记replacement_chars 中保存的标准字母。

我不希望发生这种组合,我希望将它们彼此相邻显示,如 Aˋs 而不是 Às如何阻止 javascript 自动组合重音符号和标准字母

请记住,我需要保留此代码的当前结构(unicodeCharacters 数组,将 unicode 值转换为字符,然后使用正则表达式执行全局替换)时间已经过去了,我希望保持这个解决方案目前的动态。

最佳答案

出现问题的原因是您在代码示例中使用组合字符而不是修饰符字母作为重音符号,因此只需更改 replace_uni_char_two 的值即可。来自\u0300\u02CB 。要确认更改解决了问题,请运行以下简单的 JavaScript:

console.log('u00C0         : \u00C0');
console.log('u0041 + u0300 : \u0041\u0300 [Uses combining character for grave accent]');
console.log('u0041 + u02cb : \u0041\u02cb [Uses modifier letter for grave accent]');

这是输出:

u00C0         : À
u0041 + u0300 : À [Uses combining character for grave accent]
u0041 + u02cb : Aˋ [Uses modifier letter for grave accent]

请注意:

  • decomposition of +U00C0 ( À ) 是拉丁文大写字母 A (U+0041) 加上重音符号 (U+0300)。
  • COMBINING GRAVE ACCENT (U+0300)是一个组合字符,它将与前面的字符组合成单个字形进行渲染。这是您需要在代码中解决的问题。
  • 相比之下,解决您问题的字符 MODIFIER LETTER GRAVE ACCENT (U+02CB) ,在视觉上与 COMBINING GRAVE ACCENT (U+0300) 非常相似,但它是一个修饰符字母。它不会与前面的字符组合成单个字形进行渲染。

因此修复代码的一般方法是:

  • 确定您定义的每个特殊字符的分解,这可能是一个基本字符,后跟一个组合字符
  • 获取组合字符对应的修饰符字母。组合字符的 Unicode 名称将包括“COMBINING”,其对应的修饰符字母的名称将包括“MODIFIER LETTER”。例如:“组合重音”与“修饰字母重音”。
  • unicodeChars 的代码声明中指定修饰符字母的值,而不是组合字符

有关这个重要问题的更多详细信息,请参阅 What is the difference between “combining characters” and “modifier letters”?

关于javascript - 在 unicode 字母旁边显示 unicode 重音符号,而不是组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53209963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com