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

2023-06-24 11:13:47 +08:00
 ryansvn

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

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

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

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

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

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

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

这个保存编码的事情,是在找办法运行 bat 中无意中发现的。
YGHMXFAL
2023-06-24 11:34:38 +08:00
@ryansvn #3 脚本最后加一行 PAUSE 来阻塞,看看报错
ryansvn
2023-06-24 11:35:38 +08:00
@YGHMXFAL 已经添加了,一样闪退,说明根本就没有运行到那个位置。奇怪的是,我把命令一行行复制到 cmd 中,顺利执行
roycestevie6761
2023-06-24 11:36:49 +08:00
把中文删了
roycestevie6761
2023-06-24 11:38:33 +08:00
把整个命令文件贴上来看看
YGHMXFAL
2023-06-24 11:42:46 +08:00
@ryansvn #5 那么大概率就是我在 2 楼所说的问题,结尾不是\r\n,你想想啥办法改改,就用 NPP 就不错
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
2023-06-24 11:47:54 +08:00
Note*pad++ 只能识别 UTF-8 ,但其实 UTF-8 又分为有没有 BOM 两种。你需要使用更高级的编辑器,推荐 UltraEdit ,它更强大,更专业 。
documentzhangx66
2023-06-24 11:48:15 +08:00
麻蛋什么时候 Note*pad 都能成为违禁词,这也太扯蛋。
hxy100
2023-06-24 11:51:18 +08:00
@documentzhangx66 你仔细看 1 楼的截图,Notepad++是可以区分有无 BOM 头的,并且可以一键转换
vituralfuture
2023-06-24 12:36:32 +08:00
用 python ,读取文件,解码然后重新编码
NoOneNoBody
2023-06-24 13:08:12 +08:00
你这个 bat 不能运行,应该跟 ansi/utf8 无关,找其他原因吧
loginv2
2023-06-24 13:22:15 +08:00
@NoOneNoBody 有关的,我也遇到过,所以每次都要很小心
geelaw
2023-06-24 13:29:11 +08:00
第一,检查你是否把本机的默认编码设置为 UTF-8 了,如果这样的话 ANSI (实际上记事本的 ANSI 是本机默认编码)等于 UTF-8 。

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

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

第四,检查其他问题,比如 bat 必须用 \r\n 作为行结尾,以及插入 pause 调试之。
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
2023-06-24 13:55:25 +08:00
如果只有 ASCII 字符 ANSI 和 UTF-8 是等价的。保存了以后是没有任何区别的。
Hellert
2023-06-24 14:15:42 +08:00
bat 不能运行,是因为换行符,必须是 crlf ,unix 换行符是不行的
ooppoo
2023-06-24 16:32:46 +08:00
为什么我可以运行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX