V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ryansvn
V2EX  ›  Windows

windows 的记事本不能保存为 ANSI 编码?

  •  
  •   ryansvn · 2023-06-24 11:13:47 +08:00 · 3164 次点击
    这是一个创建于 518 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虚拟机新装的 win11 发现不能运行原先的 bat 文件,网上的方法全部试了,都还是不行。 后来发现,这个 bat 文件是 utf-8 格式的,随另存为 ANSI ,再试还是不行。 然后再用记事本打开查看,发现编码依然是 utf-8 ,随再次另存 ANSI 一次,再打开看,居然还是 utf-8 。

    不甘心,在 win10 下试了下,发现居然都是,也就是现在记事本无论存储的时候,是否选在 ANSI ,都不起作用,再打开看都是 utf-8 格式的。

    不知道各位是否能够复现?

    ps: 另外,win11 不能运行 bat 还是没有解决,无论是 bat 头部添加 chcp 来指定代码,还是修改注册表,还是设置环境变量,总之,都是不生效,无奈,只能一行行复制到 cmd 中去执行。

    28 条回复    2023-06-26 20:19:25 +08:00
    hxy100
        1
    hxy100  
       2023-06-24 11:20:38 +08:00   ❤️ 1
    虽然老是说 Notepad++作者屁股坐不正,但是对于常年使用 Notepad++的用户来说,根本木有这种问题。
    ---
    YGHMXFAL
        2
    YGHMXFAL  
       2023-06-24 11:27:07 +08:00
    1 楼+1,NPP 好评

    其实使用啥编码来存储好像无所谓吧?都能执行 BAT 啊?只要你 CHCP 和存储编码匹配就行了~

    前提是,无论你存储使用啥编码,必须是\r\n 结尾~
    ryansvn
        3
    ryansvn  
    OP
       2023-06-24 11:32:39 +08:00
    @YGHMXFAL 不知道怎么回事,在 win10 下可以顺利执行的 bat ,在这个 win11 中死活不运行,一闪而过。

    这个保存编码的事情,是在找办法运行 bat 中无意中发现的。
    YGHMXFAL
        4
    YGHMXFAL  
       2023-06-24 11:34:38 +08:00
    @ryansvn #3 脚本最后加一行 PAUSE 来阻塞,看看报错
    ryansvn
        5
    ryansvn  
    OP
       2023-06-24 11:35:38 +08:00
    @YGHMXFAL 已经添加了,一样闪退,说明根本就没有运行到那个位置。奇怪的是,我把命令一行行复制到 cmd 中,顺利执行
    roycestevie6761
        6
    roycestevie6761  
       2023-06-24 11:36:49 +08:00
    把中文删了
    roycestevie6761
        7
    roycestevie6761  
       2023-06-24 11:38:33 +08:00
    把整个命令文件贴上来看看
    YGHMXFAL
        8
    YGHMXFAL  
       2023-06-24 11:42:46 +08:00
    @ryansvn #5 那么大概率就是我在 2 楼所说的问题,结尾不是\r\n,你想想啥办法改改,就用 NPP 就不错
    documentzhangx66
        9
    documentzhangx66  
       2023-06-24 11:44:50 +08:00
    1.使用 UTF-8 是一件好事,这个习惯你要坚持,能让你避免很多乱码问题。
    从数据库、编程代码、HTML js css 、字符数据文本文件等等,建议都统一为 UTF-8 。

    2.Windows 的 CMD 默认不是 UTF-8 编码,你需要在打开 CMD 后,先输入:
    chcp 65001
    把编码改为 UTF-8 。
    documentzhangx66
        10
    documentzhangx66  
       2023-06-24 11:47:54 +08:00
    Note*pad++ 只能识别 UTF-8 ,但其实 UTF-8 又分为有没有 BOM 两种。你需要使用更高级的编辑器,推荐 UltraEdit ,它更强大,更专业 。
    documentzhangx66
        11
    documentzhangx66  
       2023-06-24 11:48:15 +08:00
    麻蛋什么时候 Note*pad 都能成为违禁词,这也太扯蛋。
    hxy100
        12
    hxy100  
       2023-06-24 11:51:18 +08:00
    @documentzhangx66 你仔细看 1 楼的截图,Notepad++是可以区分有无 BOM 头的,并且可以一键转换
    vituralfuture
        13
    vituralfuture  
       2023-06-24 12:36:32 +08:00
    用 python ,读取文件,解码然后重新编码
    NoOneNoBody
        14
    NoOneNoBody  
       2023-06-24 13:08:12 +08:00
    你这个 bat 不能运行,应该跟 ansi/utf8 无关,找其他原因吧
    loginv2
        15
    loginv2  
       2023-06-24 13:22:15 +08:00   ❤️ 1
    @NoOneNoBody 有关的,我也遇到过,所以每次都要很小心
    geelaw
        16
    geelaw  
       2023-06-24 13:29:11 +08:00   ❤️ 1
    第一,检查你是否把本机的默认编码设置为 UTF-8 了,如果这样的话 ANSI (实际上记事本的 ANSI 是本机默认编码)等于 UTF-8 。

    第二,如果你的文本文件在 UTF-8 和 ANSI 下编码一样,那么记事本可能会优先识别为其中一个编码。

    第三,你可能应该考虑把 bat 保存为 Unicode (UTF-16 LE),这样 Windows NT 系列都可以运行。

    第四,检查其他问题,比如 bat 必须用 \r\n 作为行结尾,以及插入 pause 调试之。
    xuc
        17
    xuc  
       2023-06-24 13:30:40 +08:00
    检查一下区域设置,如果“Beta 版:使用 Unicode UTF-8 提供全球语言支持”被选中,那么记事本中 ANSI 就是指 UTF-8
    https://vip2.loli.io/2023/06/24/ympkow5JEuB1ZW9.png
    gyf304
        18
    gyf304  
       2023-06-24 13:55:25 +08:00 via Android
    如果只有 ASCII 字符 ANSI 和 UTF-8 是等价的。保存了以后是没有任何区别的。
    Hellert
        19
    Hellert  
       2023-06-24 14:15:42 +08:00 via Android
    bat 不能运行,是因为换行符,必须是 crlf ,unix 换行符是不行的
    ooppoo
        20
    ooppoo  
       2023-06-24 16:32:46 +08:00 via Android
    为什么我可以运行
    Stoney
        21
    Stoney  
       2023-06-24 18:34:08 +08:00 via iPhone
    mxT52CRuqR6o5
        22
    mxT52CRuqR6o5  
       2023-06-24 18:38:44 +08:00 via Android
    不是不能保存为 ansi ,是不能指定编码格式打开一个文件,打开时是通过某种算法去猜编码格式
    mxT52CRuqR6o5
        23
    mxT52CRuqR6o5  
       2023-06-24 18:40:14 +08:00 via Android
    打不开 bat 是其他问题
    ryansvn
        24
    ryansvn  
    OP
       2023-06-25 09:11:56 +08:00
    @Hellert 我重新使用记事本编辑一边这个 bat ,再保存,都还是不行。应该不是换行符的问题。很是奇怪
    ryansvn
        25
    ryansvn  
    OP
       2023-06-25 09:12:40 +08:00
    @documentzhangx66 我也是奇怪,编辑了回复回复不了,没想到居然是 N***++的问题,这个居然也是敏感词,很无语
    ryansvn
        26
    ryansvn  
    OP
       2023-06-25 09:13:34 +08:00
    @geelaw 感谢指引,各种方法都测试了,还是不行,非常奇怪,win10 下同样 bat 可以运行,这就非常无语了
    ryansvn
        27
    ryansvn  
    OP
       2023-06-25 09:14:12 +08:00
    @ooppoo 发现不是所有的 bat 不运行,有些不行,很费解
    Hellert
        28
    Hellert  
       2023-06-26 20:19:25 +08:00
    把 echo off 都删除,在 cmd 运行一下不就知道啥原因了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2020 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:55 · PVG 08:55 · LAX 16:55 · JFK 19:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.