Board logo

标题: [问题求助] PowerShell的Get-Content获取文本时怎样确保不乱码? [打印本页]

作者: 小白龙    时间: 2023-12-10 05:46     标题: PowerShell的Get-Content获取文本时怎样确保不乱码?

下面的代码, 在a.txt文件的编码是utf8时, 能执行成功, 但如果是别的编码时, 读到变量中是乱码, 有没有最简单直接有效的方法让变量$textContent中的文本不乱码?
坛里也搜索到一些办法, 但感觉有点复杂, 求路过大佬指教, 谢谢
  1. $textContent = Get-Content -Path "$home\desktop\a.txt" -enc utf8
复制代码

作者: wanghan519    时间: 2023-12-10 06:09


作者: 小白龙    时间: 2023-12-10 06:21

回复 2# wanghan519


    我的是ps5 ,执行后报错如下

PS C:\Users\Administrator> gc -enc
Get-Content : 缺少参数“Encoding”的某个参数。请指定一个类型为“Microsoft.PowerShell.Commands.FileSystemCmdletProviderE
ncoding”的参数,然后再试一次。
所在位置 行:1 字符: 4
+ gc -enc
+    ~~~~
    + CategoryInfo          : InvalidArgument: ( [Get-Content],ParameterBindingException
    + FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.GetContentCommand

PS C:\Users\Administrator>
作者: 小白龙    时间: 2023-12-10 06:25

回复 2# wanghan519


    有没有哪个exe的小软件,最好几百K,不要太大了, 能通过命令行显示指定文件的编码, 这样就好多了, 我在我的代码前, 加上判断编码的代码
作者: wanghan519    时间: 2023-12-10 06:27

回复 4# 小白龙


    file命令,或者各种语言里的库比如go里用chardet
作者: wanghan519    时间: 2023-12-10 06:29

回复 4# 小白龙


    powershell也有库
Install-Module -Name EncodingAnalyzer
作者: 小白龙    时间: 2023-12-10 06:57

回复 6# wanghan519


    感谢推荐,
我找到了下面链接的小工具, 很不错, 但是编码叫法不同, 还得处理一下
http://www.bathome.net/redirect. ... 7518&pid=276615
作者: 小白龙    时间: 2023-12-10 06:58

回复 5# wanghan519


     file命令 怎么用?
作者: wanghan519    时间: 2023-12-10 07:33

本帖最后由 wanghan519 于 2023-12-10 07:40 编辑

回复 8# 小白龙


     file需要linux环境,也有打包成exe的,使用如图

作者: 小白龙    时间: 2023-12-10 07:44

回复 9# wanghan519

有点复杂, 感觉还是went大佬的code更小巧就是编码叫法不一样, 在PS中还得修改
作者: wanghan519    时间: 2023-12-10 07:55

回复 10# 小白龙


    呃,图中也不算复杂吧,第一句创建utf8编码的文件a.txt
2. 用iconv转utf8到gbk存成b.txt,这里各种编码随便转,也可以改成用.net那套东西
3. 4. 检测文件编码,用file
5. 6. 检测文件编码,用powershell
如有需要,也可以问一下ai,让他用go写个检测编码并转换的exe,一般是用chardet,写出来的基本直接可以编译成exe用
大佬写的也好用,怎么方便怎么来吧。。。
作者: Five66    时间: 2023-12-11 00:15

回复 7# 小白龙


可以自己弄个编码名字对照表,例如
  1. $the=@{'ANSI'='Default';'UTF-8'='UTF8';'UTF-8_BOM'='UTF8';'UTF-16_BE'='BigEndianUnicode';'UTF-16_LE'='Unicode';}
  2. $enc = & "coder.exe" -s -a gc -f "0.txt"
  3. $textContent = Get-Content -Path "$home\desktop\a.txt" -enc ($the[$enc])
复制代码

作者: 小白龙    时间: 2023-12-11 18:15

回复 12# Five66


    感谢楼上大佬, 要是能改源码就好了, 或者在源码中加个 -ps 参数, 输出就是ps的编码名
作者: Five66    时间: 2023-12-12 00:06

回复 13# 小白龙


    那大概是win32汇编的程序,不知道工具链用的masn还是什么的,而且源码coder.asm里的include的那些My开头的asm也没给出来,不知道是工具链自带的还是真的是自定义的,估计只能让原作者来修改了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2