使用MS Office URI Schemes时含非ASCII字符引发错误的技术咨询
咱们直接说核心原因:ms-excel自定义URI协议对路径的编码要求,和普通本地文件链接完全不一样,具体拆解成这几点:
URI规范的强制约束
URI标准(RFC 3986)明确要求,所有非ASCII字符必须通过百分号编码(Percent-Encoding)才能在URI中使用。普通的<a href="file:C:/...">链接能正常工作,是因为浏览器或操作系统会自动帮你完成字符编码的转换;但ms-excel:ofe|u|这种协议是由Excel直接解析的,它不会自动处理非ASCII字符的编码,所以当路径里出现ö、ä、ß这类字符时,Excel根本识别不了,直接报错。ms-excel协议的解析逻辑限制
微软设计ms-excelURI协议时,对u参数(用于指定文件路径)的处理是严格遵循URI编码规则的,它不会像系统的本地文件链接那样兼容操作系统的本地字符集(比如Windows的UTF-16)。举个实际的编码例子:ä对应 URI 编码:%C3%A4ö对应 URI 编码:%C3%B6ß对应 URI 编码:%C3%9F
你需要把路径里的这些特殊字符替换成对应的编码后,再放到ms-excel的URI中,Excel才能正确识别并打开文件。
本地路径与URI的解析逻辑差异
当你去掉ms-excel:ofe|u|前缀后,链接变成了纯本地文件路径,此时操作系统的文件管理器会用本地字符集去解析路径,所以带特殊字符的路径能正常访问。但ms-excel协议是基于URI规范的,它要求路径必须是URI编码后的格式,两者的解析逻辑完全不同,这就是为什么两种情况会有截然不同的结果。
举个修正后的示例,你原来的路径testätür.xlsx需要转成编码后的test%C3%A4t%C3%BCr.xlsx,对应的完整URI应该是:
<a href='ms-excel:ofe|u|file:C:/Users/*********/Downloads/test%C3%A4t%C3%BCr.xlsx'>link</a>
这样应该就能正常通过ms-excel协议打开带特殊字符的文件了。
内容的提问来源于stack exchange,提问作者Ali Turab Abbasi

