Closed Davider-code closed 2 years ago
The batch file doesn't run. Both file looks correct to me with default settings, 要拷到的文件.txt
is UTF-8 not ANSI.
This might due to the encoding declaration <?xml version="1.0" encoding="UTF-8"?>
. check "Don't parse encoding tags." or reload without file variables (File -> Reload -> No File Variables) should fix problem for the specific file. Maybe it's better to validate the encoding declaration for small file, and show warning when validating failed.
感谢回复, 不能智能化一点, 免手改吗? 另外改了设置后, 会不会对代码执行有影响?
另外, 为什么一个ANSI的文件, 我手改格式为UTF8-BOM, 但是打开后还是ANSI? 怎样解决这个问题?
Ctrl+shift+A 会使文章乱码, 右下角手动改成ANSI不乱码, 这个要设置哪里? 上次反馈后, 一直没解决
最后, 反馈乱码问题这么多, 感觉是不是应该想想更彻底的解决方案, 我用国外的emeditor, 从来没遇到乱码问题
建议能以目标为导向, 把一些通用的, 眼见为实的设置设为默认.
大家用记事本, 可能就是改改文字,改编码, 批处理, 命令之类的简单操作, 虽然每次反馈, 都能给个解决方案, 但是感觉太复杂了, 有些选项应该根据大众的使用频率设为默认
记的第一次下载使用notepad2, 还没操作几下就乱码了, 但是发现输入时, 能自动提示,软件, 补全, 着色, 又硬着头皮一路用下来了, 但乱码问题实在太多, 有些应该不是BUG, 可能是我太笨了, 但至少希望开发者能考虑一下上面的建议
再例如, 我新建了一个空的txt文件, 然后,在任务栏右下角改编码格式为UTF8-BOM, 然后关闭文件再打开, 文件的格式还是UTF8, 为什么更改没有生效? 这样设计有什么意义?
我用的有个软件, 如果文件格式为UTF8的话就会乱码, 必须UTF8-BOM , 现在搞的我, 必须用那个软件来生成空的UTF8-BOM, 不然用notepad2生成的,直接乱码, 后面怎么改都不行
@zufuliu 我把有abc三个字母的txt文件, 改成ansi都不灵, 始终都是utf8, 真是晕菜了, 难道还要设置某些参数? 为啥这么难搞? 请看图:
鉴于你的习惯,试试: Based on your habit, try:
@zufuliu 你好, 现在我下载使用了r4130, 乱码有所好转, 情况如下
我新建一个bat后缀的文件, 打开后,自动就是ANSI编码格式, 这点不错, 因为批处理要这个格式才能正确执行, 以前是UTF8
基于此, 我想问一下, 能否实现我新建一个.ps1后缀的文件【powershell脚本文件】, 打开后, 自动就是UTF8-bom编码格式?
因为powershell脚本文件默认的编码就是UTF8-bom, 我如果用UTF8, 用某款软件打开中文部分是乱码, 如果不能实现, 有没有手动设置的地方? 提前感谢
@lifenjoiner 感谢提醒,对于bat文件 r4130默认就是ansi了
@zufuliu 刚发现的问题, 如果我新建一个txt文件,默认是utf8格式,我打开后,我从状态栏右下角把编码改成utf8-bom,却无法点击保存了, 按钮变灰了,转格式也不行了? 转换文本编码格式实在是高频常用, 对于字幕, 对于批处理, 对于PS脚本 . . . 用系统自带的记事本都可以用另存的方式改成其它的编码,真心希望下个版本彻底解决一下这些问题, 我在群里, 贴吧, 论坛, 看到太多notepad2 乱码的问题 要求很简单, 1.能使用状态栏右下角把编码改为任意编码格式 2.对于各类型或扩展名文件可以自定义编码或加载格式,例如 .bat默认是ansi .srt默认是utf8 .ps1默认是utf8-bom 3.对于直接右键新建的txt文件, 如果直接更改扩展名,打开后,直接按上面第二条推荐的编码加载,现在新建的.txt改后缀.bat打开后就是ansi不错,其它建议也这样
你在bat第一行加上chcp 65001
就可以写 UTF-8 的 bat 了
你好, 我测试了一下, 无法执行
你好, 我测试了一下, 无法执行
chcp 65001放在第一行。 文件要需要存成UTF-8 no BOM才行。 bat是强制以ANSI形式打开的,chcp 65001是切换到UTF-8代码页的命令,而UTF-8 no BOM的ASCII字符部分兼容ANSI,所以可以实现utf-8来书写后续的代码。
你好, 我测试了一下, 无法执行
chcp 65001放在第一行。 文件要需要存成UTF-8 no BOM才行。 bat是强制以ANSI形式打开的,chcp 65001是切换到UTF-8代码页的命令,而UTF-8 no BOM的ASCII字符部分兼容ANSI,所以可以实现utf-8来书写后续的代码。
感谢指教 我是在.bat后缀的批处理里面执行powershell代码, 就像最上面的演示那样 尝试了多次你提醒的方式, 行不通, 因为 powershell代码中, 用到了不少编码格式的函数
你好, 我测试了一下, 无法执行
chcp 65001放在第一行。 文件要需要存成UTF-8 no BOM才行。 bat是强制以ANSI形式打开的,chcp 65001是切换到UTF-8代码页的命令,而UTF-8 no BOM的ASCII字符部分兼容ANSI,所以可以实现utf-8来书写后续的代码。
感谢指教 我是在.bat后缀的批处理里面执行powershell代码, 就像最上面的演示那样 尝试了多次你提醒的方式, 行不通, 因为 powershell代码中, 用到了不少编码格式的函数
powershell不应该直接用ps1文件吗?本身就支持utf-8。 bat里面可以用powershell来调用ps1文件啊。
@Mapaler .bat文件的第一行,加下面的代码, 其它行是Poweshell代码, 这样方便
@zufuliu 刚刚又遇到问题了, 一个包含中文的GBK编码的txt文件, 用notepad2状态栏右下角改编码格式为UTF-16LE, 保存后再打开, 所有文字全部乱码, 右下角仍显示GBK, 怎么都不能恢复了, 这太恐怖了, 建议加急处理一下, 如果被人不小心用了, 那郁闷死了 我对编码不太懂, 感觉utf-16应该可以兼容gbk里的字符范围吧, 表达若有误, 欢迎指出
@zufuliu 刚刚又遇到问题了, 一个包含中文的GBK编码的txt文件, 用notepad2状态栏右下角改编码格式为UTF-16LE, 保存后再打开, 所有文字全部乱码, 右下角仍显示GBK, 怎么都不能恢复了, 这太恐怖了, 建议加急处理一下, 如果被人不小心用了, 那郁闷死了 我对编码不太懂, 感觉utf-16应该可以兼容gbk里的字符范围吧, 表达若有误, 欢迎指出
Please attach zipped test file.
@zufuliu 刚刚又遇到问题了, 一个包含中文的GBK编码的txt文件, 用notepad2状态栏右下角改编码格式为UTF-16LE, 保存后再打开, 所有文字全部乱码, 右下角仍显示GBK, 怎么都不能恢复了, 这太恐怖了, 建议加急处理一下, 如果被人不小心用了, 那郁闷死了 我对编码不太懂, 感觉utf-16应该可以兼容gbk里的字符范围吧, 表达若有误, 欢迎指出
Please attach zipped test file. Test.zip
@zufuliu 这两天使用r4130, 除了bat默认ansi有改观以外, 其它的问题,仍然都存在, 转编码没生效, 转编码出乱码, 太严重了 暂时先用powershell ISE编辑了, 过一段时间再下载notepad2新版尝试
为什么用下面的代码检测notepad2生成的utf-8-bom, 怎么测都是truehttps://www.programminghunter.com/article/8483784766/
This should fixed now, please test latest builds.
多谢提醒, 请问在哪里下载, 我看发布页还是4130
Latest development builds (artifacts in Release configuration for each compiler and platform) are available at https://github.com/zufuliu/notepad2/actions and https://ci.appveyor.com/project/zufuliu/notepad2.
e.g. artifacts for latest build https://github.com/zufuliu/notepad2/actions/runs/2077973365 https://ci.appveyor.com/project/zufuliu/notepad2/builds/43100879/job/8180f6phk4fx2q7p/artifacts
你好, 刚试了一下, Notepad2 (64-bit) 4.22.03 r4130 (89af6d4d) 感觉还是老样子,描述如下 1.我新建了一个空的txt, 然后打开, 然后利用状态栏改编码为utf8-bom , 然后保存按钮是灰色, 不能保存, 只有输入字符才可以保存, 以前的版本是可以保存的, 但是保存后不能生效 2.还是上面的空文件, 我输入a, 然后改编码为ansi 保存, 再次打开, 编码显示仍然是utf8 , 编码没有修改成功, 但是如果我改编码为utf8-bom保存, 再打开是编码修改成功的 别的还没有试, 有点试怕了, 改编码这么难吗? 目前正在使用Powershell脚本改编码
Issue 1 is fixed by a4923681ea095ba94a536a80eaf686eb57ae3c48. Issue 2 is intended: if don't want UTF-8, you can (1) uncheck "Open 7-bit ASCII file in UTF-8 mode" and set default encoding to non-UTF-8 encoding; (2) type some non-ASCII characters, e.g. Chinese characters.
感谢及时回复, 关于问题2, 我还是不明白, 难道不能按照文本本身的编码格式来加载吗? 说简单一点, 就是让我所改,所见即所得: 1.当我把编码改成了ansi 如果是英文, 当我再次打开文件时右下角显示 ansi 如果是中文, 右下角显示GBK 2.当我把编码改成了utf8 当我再次打开文件时右下角显示 utf8 3.当我把编码改成了utf8-bom 当我再次打开文件时右下角显示 utf8-bom 逻辑本来不就这样吗? 在下不才, 只会点CMD和PS脚本, 真不明白一个简单的记事本, 搞这么多花样, 实在是晕菜了
不妨趁机多了解一下编码,编码有差异性,也有一定的兼容性。特别是纯英文字符(ASCII)的 ANSI 编码,是一些其它编码的子集,比如:GBK、UTF8等。
字符与二进制序列的对应关系,叫做字符集。 ASCII 字符集由 美国电气和电子工程师协会于1963年推出。使用7位表示 数字、英语字母、常用英文符号 等128种字符。 每个字符对应的序号叫做码点。 将码点储存到硬盘上时记为一个或多个字节,这种映射叫做编码。ASCII 采用 7位前面补 0 形成 8 位刚好一个字节的形式来编码。
美国制定的 ASCII 字符集不足以显示其他地区的文字,因此不同国家和地区分别制定了自己的字符集标准。不同地区的字符集是各自定义的,因此互相不兼容。 GB、Big5、日本的 Shift JIS 等为了使 英文文件 直接打开不会乱码,前 128 位码点字符都和 ASCII 一致,以 1 个字节储存;汉字码点大于255,以2个字节的形式储存。但互相之间打开,码点128以后的字符会变为乱码。 这类兼容 ASCII 但互相之间并不兼容的字符集,在 Windows 下被称为 ANSI 代码页,代表当前系统默认语言的字符集,所以简体中文电脑 ANSI 指的就是 GBK,繁体中文就是 Big5,日文下则是 Shift-JS。
不同 地区编码 阻碍了信息的沟通,来自多个国家政府和各大软件商的代表参与建立了非营利机构Unicode联盟,负责制定Unicode标准。 Unicode定义了十几万个字符,以及未来的扩展区,因此码点长度需要32位。 因此如果采用UTF-32方式编码,储存形式虽然Unicode码点完全一致,但每个字符要使用4个字节,容量太大,现实中根本没人使用。 大部分情况下,人们不会用到码点为6万以后的字符,因此UTF-16以2个字节表示的形式基本也和Unicode原始码点一致,以至于以前的记事本直接将UTF-16小端序称作Unicode。 但是UTF-16 对于日常只有英文字符的西方人仍然增加了储存所需要的空间,并且 2 字节也不兼容 ASCII 编码。 所以现在主流使用的是UTF-8编码,前128位兼容 ASCII,英文字符只占一个字节,到后面增加长度来表示其他字符,因此UTF-8编码的文件中,常见的中文字符占用3个字节。 但不管什么编码,读取到内存中时,系统都会将其还原成Unicode的码点。
字节顺序标记(英语:byte-order mark,BOM)用来标记文件使用的是哪一种Unicode字符编码。 在没有 BOM 且只有英文字符时,UTF-8 和 ASCII 编码完全一致,程序并不能判断你是 UTF-8 还是某一种 ANSI 编码,有汉字时则可以进行猜测。
非常感谢您的分享, 大概了解了原理 我只是感觉使用软件设置编码后, 输出的结果应该能所见即所得, 越简单越通用越好, 如果真是技术上难以判断, 那我也不纠结这个问题了, 我目前用下面的方法创建自己想要的编码的文件的,
用下面的PS代码, 可以可以分别输出 GBK和UTF8-bom的 纯英文内容的bat文件 "abc" | Out-File -enc default "$HOME\Desktop\test.bat" "abc" | Out-File -enc utf8 "$HOME\Desktop\test.bat"
另外一些其它文本编辑软件是能实现我的需求的
直接看文件二进制,可以发现GBK、Big5、UTF-8的英文字母和常见控制符换行回车编码完全一样。所以不打后面的中文二字时,记事本不知道你是GBK还是UTF-8。 那么就在UTF-8前面加入BOM(第四个文件),就是明确的告诉记事本这是UTF-8。
至于你说只有英文的 bat 打开是 gbk,是因为作者之前的设定,强制 bat 以 ANSI 打开,你把扩展名改成 txt ,你打开就变成 utf-8 了。
第三次反馈乱码问题了, 目前用的是最版本的r4056
ctrl+shift+a乱码问题,自上次反馈后, 一直没有解决, 那我就手动使用右下角的编码窗口改吧, 但是即使是手改, 也会乱码, 也会自动将GBK转为UTF8, 批处理用utf8没法执行,
在日常实际使用过程中, 乱码的问题, 要严重的多了, 大多指的是编辑CMD和PS脚本相关的代码,
比较喜欢notepad2的自动输入功能, 所以在反馈一次, 说实话, 用别的记事本软件, 从来没有遇到乱码过, 期待开发者能加把劲, 把乱码问题彻底解决一下, 提前感谢
刚刚看了一下其它反馈的问题, 还真发现乱码的问题, 不少, 看来是共性了
测试文件: https://send.cm/d/9PzD 操作演示