Angular file-saver保存含阿拉伯字符文件名时特殊字符异常问题
解决含阿拉伯字符文件名在Angular file-saver中显示异常的问题
问题根源
你使用的\u202A是LTR嵌入控制字符,部分文件处理库(包括file-saver)在解析文件名时,会将这类嵌入型控制字符识别为非法/特殊字符并转义成下划线,导致"456"变成"_456"。而C#的File.Create对这类控制字符兼容性更好,所以能正常显示。
解决方案
把\u202A替换为左到右标记(\u200E),这是一种中性的方向控制字符,仅强制后续文本按LTR顺序渲染,不会被file-saver转义:
修改后的后端C#代码
Console.OutputEncoding = System.Text.Encoding.UTF8; var fileName = new StringBuilder(); string city = "جزيرة شقر"; // 或示例"New York" fileName.Append("X_123-"); fileName.Append("Text-"); fileName.Append(city); fileName.Append("-" + "\u200E" + "456"); // 替换\u202A为\u200E Console.WriteLine(fileName);
更稳妥的全局LTR控制
如果希望整个文件名强制LTR顺序,也可以在文件名最开头添加\u200E,无需在数字前单独加:
Console.OutputEncoding = System.Text.Encoding.UTF8; var fileName = new StringBuilder(); string city = "جزيرة شقر"; fileName.Append("\u200E"); // 全局强制LTR fileName.Append("X_123-Text-"); fileName.Append(city); fileName.Append("-456"); Console.WriteLine(fileName);
这样修改后,后端生成的文件名在Angular中用fileSaver.saveAs保存时,既能保持正确的LTR顺序,数字也不会被转义成下划线。
内容的提问来源于stack exchange,提问作者Silny ToJa
相关产品推荐
相关产品推荐

