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

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

[复制链接]

该用户从未签到

1

主题

5

帖子

7

积分

助理工程师

Rank: 1

积分
7
发表于 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的每日心情
    开心
    22 小时前
  • 签到天数: 53 天

    [LV.5]常住居民I

    352

    主题

    3091

    帖子

    3100

    积分

    管理员

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

    Rank: 10Rank: 10Rank: 10

    积分
    3100

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 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)
            }
        })

    }
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    12

    主题

    402

    帖子

    579

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    579

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

    发表于 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

    主题

    5

    帖子

    7

    积分

    助理工程师

    Rank: 1

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

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

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    7

    积分

    助理工程师

    Rank: 1

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

    太棒了!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 53 天

    [LV.5]常住居民I

    352

    主题

    3091

    帖子

    3100

    积分

    管理员

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

    Rank: 10Rank: 10Rank: 10

    积分
    3100

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

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

    大佬牛逼!
    卧槽,没想到这种方法
    感觉tampermonkey引入本地文件还是不太方便了,现在
    我解决这个问题的时候又发现两个问题,不知道大佬碰没碰到过
    1.gm_xhr获取file路径文件overrideMimeType之类的字段好像都会被自动抛弃
    2.火狐疑似直接放弃了浏览器拓展访问文件的功能= =
    但是如果现在浏览器对file://路径兼容这么差
    tampermonkey支持外部编辑器好像没什么特别好的方法了吧....
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    12

    主题

    402

    帖子

    579

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    579

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

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

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

    使用道具 举报

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

    [LV.1]初来乍到

    12

    主题

    402

    帖子

    579

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    579

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

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

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

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 53 天

    [LV.5]常住居民I

    352

    主题

    3091

    帖子

    3100

    积分

    管理员

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

    Rank: 10Rank: 10Rank: 10

    积分
    3100

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

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

    基本懂了,cxxjackie哥哥牛逼!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    7

    积分

    助理工程师

    Rank: 1

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

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

    使用道具 举报

    发表回复

    本版积分规则

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