Board logo

标题: [系统相关] 郁闷,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

为什么“关联其他记事本软件不让”?
我写文件都不用记事本的,直接改关联程序:
  1. ftype txtfile=第三方程序 %1
  2. 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

  1. chcp 65001
复制代码
然后批处理就支持utf-8了,type命令啥的都没问题
想回到gbk,就
  1. chcp 936
复制代码

作者: Batcher    时间: 2024-1-11 08:27

回复 1# hlzj88


1、用其它编辑器替代记事本
2、把BAT脚本也另存为UTF-8
  1. chcp 65001 >nul
复制代码

作者: 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


和bat是否为utf-8可能没关系。

能否给个例子说明一下:

以上三个条件同时满足的情况下,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"
  1. Dim oStream, file, s
  2. file = wsh.Arguments(0)
  3. If checkUTF8(file) = False Then wsh.Quit()
  4. Set oStream = CreateObject("ADODB.Stream")
  5. oStream.Type = 2    'adTypeText
  6. oStream.Mode = 3    'adModeReadWrite
  7. oStream.Charset = "UTF-8"
  8. oStream.Open()
  9. oStream.LoadFromFile file
  10. s = oStream.ReadText()
  11. oStream.Close()
  12. oStream.Charset = "GB2312"
  13. oStream.Open()
  14. oStream.WriteText s
  15. oStream.SaveToFile file, 2    'adSaveCreateOverWrite
  16. oStream.Close()
  17. Function checkUTF8(ByVal file)
  18.     Dim oStream, oRegExp, arr(), s
  19.     Set oStream = CreateObject("ADODB.Stream")
  20.     oStream.Type = 1    'adTypeBinary
  21.     oStream.Mode = 3    'adModeReadWrite
  22.     oStream.Open()
  23.     oStream.LoadFromFile file
  24.     If oStream.Size = 0 Then
  25.         checkUTF8 = True
  26.         Exit Function
  27.     End If
  28.     ReDim arr(oStream.Size - 1)
  29.     For s = 0 To oStream.Size - 1
  30.         arr(s) = ChrW(AscB(oStream.Read(1)))
  31.     Next
  32.     oStream.Close()
  33.     s = "[\xC0-\xDF]([^\x80-\xBF]|$)"        & _
  34.         "|[\xE0-\xEF].{0,1}([^\x80-\xBF]|$)" & _
  35.         "|[\xF0-\xF7].{0,2}([^\x80-\xBF]|$)" & _
  36.         "|[\xF8-\xFB].{0,3}([^\x80-\xBF]|$)" & _
  37.         "|[\xFC-\xFD].{0,4}([^\x80-\xBF]|$)" & _
  38.         "|[\xFE-\xFE].{0,5}([^\x80-\xBF]|$)" & _
  39.         "|[\x00-\x7F][\x80-\xBF]"            & _
  40.         "|[\xC0-\xDF].[\x80-\xBF]"           & _
  41.         "|[\xE0-\xEF]..[\x80-\xBF]"          & _
  42.         "|[\xF0-\xF7]...[\x80-\xBF]"         & _
  43.         "|[\xF8-\xFB]....[\x80-\xBF]"        & _
  44.         "|[\xFC-\xFD].....[\x80-\xBF]"       & _
  45.         "|[\xFE-\xFE]......[\x80-\xBF]"      & _
  46.         "|^[\x80-\xBF]"
  47.     Set oRegExp = New RegExp
  48.     oRegExp.MultiLine = False
  49.     oRegExp.Pattern = s
  50.     checkUTF8 = Not oRegExp.Test(Join(arr, ""))
  51. 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://www.bathome.net/) Powered by Discuz! 7.2