gpt4 book ai didi

javascript - nodejs 比较 Unicode 文件名

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:48 25 4
gpt4 key购买 nike

我们尝试比较相同的文件名,一个是通过 = 运算符设置的,另一个是上传后从 Nodejs 服务器获取文件返回的,如下代码块:

var name = "tên_đẹp.WAV";

// uploaded_file is the file (tên_đẹp) returned by calling an ajax function
// to get the uploaded file in uploaded_folder of a Nodejs server
ajaxUploadFile(name).done( function(e, uploaded_file) {

if(name == uploaded_file.name) {
return uploaded_file; // This line is never reached
else {
console.log(escape(name)); // t%EAn_%u0111%u1EB9p.WAV
console.log(escape(uploaded_file.name)); // te%u0302n_%u0111e%u0323p.WAV
}
}

正如您所看到的,两个转义命令的结果是不同的。我不知道为什么他们使用不同的 unicode 格式,我怎样才能让他们使用相同的 Unicode 字符集,或者任何解决方案将不胜感激?谢谢。

最佳答案

问题是 "e\u0302""\u00EA" 在视觉上都是相同的。一是特定字符U+00EA (带有省略号的拉丁文小写字母 E),另一个是带有组合字符 U+0302e (结合抑扬音)。您必须首先将每个字符串标准化为标准形式才能进行比较。

require('unorm');

var name = "tên_đẹp.WAV";

// uploaded_file is the file (tên_đẹp) returned by calling an ajax function
// to get the uploaded file in uploaded_folder of a Nodejs server
ajaxUploadFile(name).done( function(e, uploaded_file) {

if(name.normalize() == uploaded_file.name.normalize()) {
return uploaded_file; // This line is never reached
else {
console.log(escape(name)); // t%EAn_%u0111%u1EB9p.WAV
console.log(escape(uploaded_file.name)); // te%u0302n_%u0111e%u0323p.WAV
}
}

请注意,我已经加载了 unorm 模块,该模块填充了在字符串上调用的 .normalize() 方法。此方法是 ECMA6 的一部分,在 Node 的 future 版本中,您根本不需要加载 unorm

不可能说出是什么造成了这些差异,可能是您的文本编辑器或浏览器造成的。

关于javascript - nodejs 比较 Unicode 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208086/

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