标题: [系统相关] 郁闷,win11的UTF-8,怎么破? [打印本页]
作者: hlzj88 时间: 2024-1-10 20:44 标题: 郁闷,win11的UTF-8,怎么破?
本帖最后由 hlzj88 于 2024-10-12 23:09 编辑
刚从win7直接上手win11,谁知道记事本默认为utf-8格式,网搜注册表办法重启无效,属性关联其他记事本软件不让。
以前写的、网上收集的bat,都是处理ansi txt的,要是都做修改非常不现实。喜欢用的ini后缀过渡文件也是utf-8,直接导致不敢用bat来处理文本了。
坛友们,你们都是怎么破的。有没有办法从系统上搞定,或者能让系统默认txt等用指定工具处理,而不是修改bat的办法。
啥语言也不会,只会用bat处理个文本,提取个数据啥的。这下碰墙上了。
以上是很久前发的内容
现在在没有测试新系统情况下。采用一个bat笨办法,放在经常使用位置。可以直接建立ansi格式文本。
echo 啊>1.txt
start "" 1.txt
作者: 523066680 时间: 2024-1-10 20:49
换吧,随便换个脚本都比 BAT 舒服以及强大。
作者: newswan 时间: 2024-1-10 20:55
转 powershell 吧
如果旧的要用,转 ansi , bat ,转 utf8
作者: 77七 时间: 2024-1-10 21:34
弃用系统自带的笔记本,装个其它文本软件
作者: buyiyang 时间: 2024-1-10 21:36
为什么“关联其他记事本软件不让”?
我写文件都不用记事本的,直接改关联程序:- ftype txtfile=第三方程序 %1
- ftype inifile=第三方程序 %1
复制代码
作者: hlzj88 时间: 2024-1-10 22:00
谢谢楼上各位的建议和方法。
如果再早十年,我一定学习powershell,英语那个难啊,一串字母都认识,和起来记不住了。投降。
谢谢5楼,就用你的办法了。
谢谢各位!
作者: 523066680 时间: 2024-1-10 23:23
谢谢楼上各位的建议和方法。
如果再早十年,我一定学习powershell,英语那个难啊,一串字母都认识,和起来 ...
hlzj88 发表于 2024-1-10 22:00
种一棵树,最好的时间是十年前,其次是现在。
作者: 老刘1号 时间: 2024-1-11 01:28
复制代码
然后批处理就支持utf-8了,type命令啥的都没问题
想回到gbk,就复制代码
作者: Batcher 时间: 2024-1-11 08:27
回复 1# hlzj88
1、用其它编辑器替代记事本
2、把BAT脚本也另存为UTF-8复制代码
作者: hlzj88 时间: 2024-1-14 22:04
回复 9# Batcher
谢谢坛主
不是最好的解决办法。主要系统不允许把txt文件关联为其他文本编辑软件,文件保护也不可能替换同名exe。所以产生的文件是utf-8无法抗拒。在bat语句里直接处理就面临格式问题。和bat是否为utf-8可能没关系。
chcp 只是改变环境,不能改变文件特性,处理中文内容就比较麻烦。
再次谢谢523066680版主勉励。
作者: Batcher 时间: 2024-1-15 08:37
回复 10# hlzj88
能否给个例子说明一下:
- txt是UTF-8编码
- bat也是UTF-8编码
- bat脚本开头使用了命令chcp 65001 >nul
以上三个条件同时满足的情况下,bat无法正常处理txt的问题?
作者: hlzj88 时间: 2024-1-16 13:17
回复 11# Batcher
我试了, findstr 汉字 这样的bat,存为utf-8,不能从ansi及utf-8格式txt里提取到关键词。 ansi格式的bat和txt产生的txt是ansi格式。
系统原因,如上面说的,新建txt都默认为utf-8,所以以往的工具都面临问题。
我原来的bat 只统一utf-8 为 ansi 来处理 dchp 936
在bat内语句产生或读取txt ini等类txt文件,都将面临编码判断。
刚有一个想法,也许只要在整体处理的前面部分做到ansi,也许后面就是继承格式。需要试了才确认
论坛txt附件都不能保存,
作者: Batcher 时间: 2024-1-16 16:56
回复 12# hlzj88
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: czjt1234 时间: 2024-1-16 20:45
目测问题是 findstr 是 ANSI
所以 type 1.txt | findstr "abc"
这样行不行
作者: czjt1234 时间: 2024-1-17 08:48
本帖最后由 czjt1234 于 2024-1-17 21:11 编辑
或者再弄个utf8转ansi的批处理或vbs或ps
在你的每个批处理的开头调用一下
比如把下面的vbs保存为 d:\UTF8toANSI.vbs
然后在你的批处理开头加上
start /w WScript.exe d:\UTF8toANSI.vbs "xxx.ini"
支持命令行参数,比如 start /w WScript.exe d:\UTF8toANSI.vbs "%%i"
- Dim oStream, file, s
-
- file = wsh.Arguments(0)
- If checkUTF8(file) = False Then wsh.Quit()
- Set oStream = CreateObject("ADODB.Stream")
- oStream.Type = 2 'adTypeText
- oStream.Mode = 3 'adModeReadWrite
- oStream.Charset = "UTF-8"
- oStream.Open()
- oStream.LoadFromFile file
- s = oStream.ReadText()
- oStream.Close()
- oStream.Charset = "GB2312"
- oStream.Open()
- oStream.WriteText s
- oStream.SaveToFile file, 2 'adSaveCreateOverWrite
- oStream.Close()
-
- Function checkUTF8(ByVal file)
- Dim oStream, oRegExp, arr(), s
- Set oStream = CreateObject("ADODB.Stream")
- oStream.Type = 1 'adTypeBinary
- oStream.Mode = 3 'adModeReadWrite
- oStream.Open()
- oStream.LoadFromFile file
- If oStream.Size = 0 Then
- checkUTF8 = True
- Exit Function
- End If
- ReDim arr(oStream.Size - 1)
- For s = 0 To oStream.Size - 1
- arr(s) = ChrW(AscB(oStream.Read(1)))
- Next
- oStream.Close()
- s = "[\xC0-\xDF]([^\x80-\xBF]|$)" & _
- "|[\xE0-\xEF].{0,1}([^\x80-\xBF]|$)" & _
- "|[\xF0-\xF7].{0,2}([^\x80-\xBF]|$)" & _
- "|[\xF8-\xFB].{0,3}([^\x80-\xBF]|$)" & _
- "|[\xFC-\xFD].{0,4}([^\x80-\xBF]|$)" & _
- "|[\xFE-\xFE].{0,5}([^\x80-\xBF]|$)" & _
- "|[\x00-\x7F][\x80-\xBF]" & _
- "|[\xC0-\xDF].[\x80-\xBF]" & _
- "|[\xE0-\xEF]..[\x80-\xBF]" & _
- "|[\xF0-\xF7]...[\x80-\xBF]" & _
- "|[\xF8-\xFB]....[\x80-\xBF]" & _
- "|[\xFC-\xFD].....[\x80-\xBF]" & _
- "|[\xFE-\xFE]......[\x80-\xBF]" & _
- "|^[\x80-\xBF]"
- Set oRegExp = New RegExp
- oRegExp.MultiLine = False
- oRegExp.Pattern = s
- checkUTF8 = Not oRegExp.Test(Join(arr, ""))
- End Function
复制代码
作者: jshuanya 时间: 2024-1-27 08:08
我也遇到了问题,win 10里记事本打开一个bat文件正常的,到了win 11打开中文都是乱码。
作者: buyiyang 时间: 2024-1-27 19:38
回复 12# hlzj88
findstr是少有的不支持utf-8的命令,而且处理ansi多字节字符也有bug
http://www.bathome.net/redirect.php?goto=findpost&pid=277481&ptid=68248
作者: hlzj88 时间: 2024-1-28 19:48
本帖最后由 hlzj88 于 2024-1-28 20:15 编辑
回复 15# czjt1234
谢谢提供代码,按你提示语句有内容的txt可以转ansi。
回复 17# buyiyang
谢谢你的提醒。
作者: smss 时间: 2024-1-30 13:49
用新版正常https://www.uupdump.cn/known.php?q=22635
作者: jorlaying 时间: 2024-10-11 18:47
我也发现了这个问题,在WIN11 24H2上 终端改用了UTF-8打印结果,findstr无法使用,用find输出结果为乱码。只能硬改为65001了,微软可能是想淘汰命令提示符故意搞的。
作者: czjt1234 时间: 2024-10-13 16:20
回复 16# jshuanya
回复 20# jorlaying
你们没有把win11的区域设置为中国,你的ANSI还是美国,cmd里运行chcp是437
配置为中国后chcp是936就可以了
作者: jorlaying 时间: 2024-10-13 17:37
回复 15# czjt1234
不搞了,发现netsh会这样,其他不会。还有输出的txt文件也是UTF-8格式,以前是ANSI
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |