上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

如何解决加载本地文件乱码问题?

[复制链接]

该用户从未签到

1

主题

4

回帖

9

积分

助理工程师

积分
9
发表于 2021-12-27 17:00:23 | 显示全部楼层 | 阅读模式
悬赏1油猫币已解决
本帖最后由 bfsll 于 2021-12-27 17:08 编辑

请教个问题,油猴怎么动态加载本地文件,比如2.txt,它的内容是会动态变化的。文件编码是UTF-8的
  1. aa=中国
  2. bb=123
复制代码



我用GM_xmlhttpRequest这种方式加载,但是得到的是乱码

  1. GM_xmlhttpRequest({
  2.                         method: "post",
  3.                         url: "file://D:/2.txt",
  4.                         headers: { "Content-Type": "text/json,charset=utf-8" },
  5.                         onload: function(r) {
  6.                             console.log(r)
  7.                             console.log("responseText=",(r.responseText));
  8.                             console.log("responseText=",unescape(r.responseText));
  9.                         }
  10.                     });
复制代码

  1. responseText= aa=中国
  2. bb=123
  3. responseText= aa=中国
  4. bb=123
复制代码



请问怎么解决这个问题,或者有没有其它方法也能实现?

2.zip

161 Bytes, 下载次数: 8

2.txt

最佳答案

查看完整内容

GM_xmlhttpRequest({ method: "post", responseType:'arraybuffer', url: "file:///C://Users/30832/Downloads/2.txt", headers: { "Content-Type": "text/json,charset=utf-8" }, onload: async function(r) { console.log('-----------------------') console.log(r) console.log("responseText=",await ab2str(r.response)); console.log("responseText=",unescape(r.resp ...
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-12-27 17:00:24 | 显示全部楼层
    GM_xmlhttpRequest({
        method: "post",
        responseType:'arraybuffer',
        url: "file:///C://Users/30832/Downloads/2.txt",
        headers: { "Content-Type": "text/json,charset=utf-8" },
        onload: async function(r) {
            console.log('-----------------------')
            console.log(r)
            console.log("responseText=",await ab2str(r.response));
            console.log("responseText=",unescape(r.responseText));
        }
    });

    //ArrayBuffer转字符串
    function ab2str(u,f) {
        return new Promise((resolve,reject)=>{
            var b = new Blob([u]);
            var r = new FileReader();
            r.readAsText(b, 'utf-8');

            r.onload = ()=>{
                resolve(r.result)
            }
        })

    }
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    857

    回帖

    1356

    积分

    荣誉开发者

    积分
    1356

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-12-27 22:49:45 | 显示全部楼层
    1. // ==UserScript==
    2. //...
    3. // @resource txt1 file:///D:/2.txt
    4. // @grant GM_getResourceText
    5. // ==/UserScript==

    6. const txt = GM_getResourceText('txt1');
    7. console.log(txt);
    复制代码
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2021-12-28 09:10:12 | 显示全部楼层

    这种方式尝试过,不适合内容动态变化的场景,感谢
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2021-12-28 09:11:18 | 显示全部楼层
    李恒道 发表于 2021-12-27 17:00
    GM_xmlhttpRequest({
        method: "post",
        responseType:'arraybuffer',

    太棒了!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-12-28 09:39:17 | 显示全部楼层

    大佬牛逼!
    卧槽,没想到这种方法
    感觉tampermonkey引入本地文件还是不太方便了,现在
    我解决这个问题的时候又发现两个问题,不知道大佬碰没碰到过
    1.gm_xhr获取file路径文件overrideMimeType之类的字段好像都会被自动抛弃
    2.火狐疑似直接放弃了浏览器拓展访问文件的功能= =
    但是如果现在浏览器对file://路径兼容这么差
    tampermonkey支持外部编辑器好像没什么特别好的方法了吧....
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    857

    回帖

    1356

    积分

    荣誉开发者

    积分
    1356

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-12-28 11:53:30 | 显示全部楼层
    bfsll 发表于 2021-12-28 09:10
    这种方式尝试过,不适合内容动态变化的场景,感谢

    我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    857

    回帖

    1356

    积分

    荣誉开发者

    积分
    1356

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-12-28 12:02:18 | 显示全部楼层
    李恒道 发表于 2021-12-28 09:39
    大佬牛逼!
    卧槽,没想到这种方法
    感觉tampermonkey引入本地文件还是不太方便了,现在

    我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文件这个我感觉还好,主要是自己用的时候有点麻烦,对于公开的脚本也不会用到本地文件,所以油猴支持弱一点还是可以理解,毕竟js本身不支持操作本地文件,api全靠浏览器说了算。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    620

    主题

    5084

    回帖

    5958

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    5958

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-12-28 14:23:27 | 显示全部楼层
    cxxjackie 发表于 2021-12-28 12:02
    我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文 ...

    基本懂了,cxxjackie哥哥牛逼!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2021-12-28 18:07:36 | 显示全部楼层
    cxxjackie 发表于 2021-12-28 11:53
    我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。 ...

    我是做成了按键触发的功能调用,按一次会多进行读取2.txt文件,这种场景下,如果2.txt的内容变化了,但获取的内容还是之前的。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表