Ami*_* Al 5 javascript string unicode character-encoding
我正在构建一个软件,它从用户那里获取整数并进行一些计算,然后输出结果。问题是我想使用英语数字获取用户数字(0, 1, 2, etc.),并且我想在输出中使用波斯数字(如阿拉伯语)显示数字。我已经阅读了一些有关 Unicode 转换的主题以及诸如replace()和 之类的内容charCodeAt(),但我无法理解代码。
这是一段代码。(它将波斯数字转换为英文数字,但我想做相反的事情。)
\n\n var yas ="\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xa7\xd9\xa8\xd9\xa9";\n yas = Number(yas.replace(/[\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xa7\xd9\xa8\xd9\xa9]/g, function (d) {\n return d.charCodeAt(0) - 1632; \n }).replace(/[\xdb\xb0\xdb\xb1\xdb\xb2\xdb\xb3\xdb\xb4\xdb\xb5\xdb\xb6\xdb\xb7\xdb\xb8\xdb\xb9]/g, function (d) { return d.charCodeAt(0) - 1776; })\n );\nRun Code Online (Sandbox Code Playgroud)\n
波斯语到英语的脚本似乎不必要地复杂,这让我怀疑我是否遗漏了一些东西。
\n\n基本上,对于如此有限的数据集,最简单的事情就是给自己一张地图:
\n\n// The "Persian" here aren\'t just Persian, nor are the English just English.\r\n// Both numeral sets are used in multiple languages...\r\n\r\n// One time setup\r\nvar persian ="\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xa7\xd9\xa8\xd9\xa9";\r\nvar mapPtoE = Object.create(null);\r\nvar mapEtoP = Object.create(null);\r\npersian.split("").forEach(function(glyph, index) {\r\n mapPtoE[glyph] = index;\r\n mapEtoP[index] = glyph;\r\n});\r\n// Convert one char "Persion" => "English"\r\nfunction charPtoE(ch) {\r\n return mapPtoE[ch] || ch;\r\n}\r\n// Convert one char "English" => "Persion"\r\nfunction charEtoP(ch) {\r\n return mapEtoP[ch] || ch;\r\n}\r\n// Convert the "Persian" digits in a string to "English"\r\nfunction strPToE(s) {\r\n return s.replace(/[\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xa7\xd9\xa8\xd9\xa9]/g, charPtoE);\r\n}\r\n// Convert the "English" digits in a string to "Persian"\r\nfunction strEToP(s) {\r\n return s.replace(/\\d/g, charEtoP);\r\n}\r\n\r\n// Demonstrate converting "Persian" to "English"\r\nconsole.log("Test A \xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3", "=>", strPToE("Test A \xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3"));\r\nconsole.log("Test B \xd9\xa6\xd9\xa5\xd9\xa4", "=>", strPToE("Test B \xd9\xa6\xd9\xa5\xd9\xa4"));\r\nconsole.log("Test C \xd9\xa7\xd9\xa8\xd9\xa9", "=>", strPToE("Test C \xd9\xa7\xd9\xa8\xd9\xa9"));\r\n\r\n// Demonstrate converting "English" to "Persian"\r\nconsole.log("Test A 0123", "=>", strEToP("Test A 0123"));\r\nconsole.log("Test B 654", "=>", strEToP("Test B 654"));\r\nconsole.log("Test C 789", "=>", strEToP("Test C 789"));Run Code Online (Sandbox Code Playgroud)\r\n从你的问题来看,4 和 6 可能有不止一种形式(请原谅我的无知);如果是这样,您需要调整上面的内容以处理“波斯语”到“英语”转换中的问题,并选择一个以相反的方式使用。
\n