You need to enable JavaScript to run this app. 日语环境下Chrome/Edge使用localexplorer协议打开日文路径本地文件报错
优惠活动
大模型
产品
解决方案
定价
更多

日语环境下Chrome/Edge使用localexplorer协议打开日文路径本地文件报错

问题根因

  1. 你的编码逻辑完全没有生效:代码中完成SJIS转码后得到的sjis变量没有被使用,window.open方法传入的还是未转码的原始url变量
  2. 你需要先确认本地localexplorer://自定义协议对应的处理程序支持的参数编码格式,并不是所有处理程序都默认接收SJIS编码的路径参数

修复方案

  • 先修正变量调用错误,测试SJIS编码是否可用:
url = 'localexplorer:' + event.target.innerText;
array = str2array(url);
sjis_array = Encoding.convert(array, "SJIS", "UNICODE");
sjis = Encoding.codeToString(sjis_array); 
window.open(sjis, '_blank'); // 这里替换为转码后的变量
  • 如果上述修改后仍报错,说明协议处理程序不支持直接传入SJIS字符串,改为使用UTF-8 URI编码方案,大部分现代自定义协议处理程序都支持该格式:
// 不需要转SJIS,直接对路径做URI编码即可
const filePath = encodeURIComponent(event.target.innerText)
const url = 'localexplorer:' + filePath
window.open(url, '_blank')
  • 如果以上两种方案都失效,需要将路径转换为对应编码的字节数组后手动做百分号编码,再拼接到协议前缀后使用,示例逻辑如下:
const rawPath = event.target.innerText
const array = str2array(rawPath);
const sjis_array = Encoding.convert(array, "SJIS", "UNICODE");
// 逐个字节转为%XX格式
const encodedPath = sjis_array.map(byte => '%' + byte.toString(16).padStart(2, '0')).join('')
const url = 'localexplorer:' + encodedPath
window.open(url, '_blank')

内容的提问来源于stack exchange,提问作者西浦直志

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:45:00