找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17152|回复: 13

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

[复制链接]
发表于 2023-12-10 05:46:47 | 显示全部楼层 |阅读模式
下面的代码, 在a.txt文件的编码是utf8时, 能执行成功, 但如果是别的编码时, 读到变量中是乱码, 有没有最简单直接有效的方法让变量$textContent中的文本不乱码?
坛里也搜索到一些办法, 但感觉有点复杂, 求路过大佬指教, 谢谢
  1. $textContent = Get-Content -Path "$home\desktop\a.txt" -enc utf8
复制代码
发表于 2023-12-10 06:09:47 | 显示全部楼层
 楼主| 发表于 2023-12-10 06:21:00 | 显示全部楼层
回复 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:06 | 显示全部楼层
回复 2# wanghan519


    有没有哪个exe的小软件,最好几百K,不要太大了, 能通过命令行显示指定文件的编码, 这样就好多了, 我在我的代码前, 加上判断编码的代码
发表于 2023-12-10 06:27:17 | 显示全部楼层
回复 4# 小白龙


    file命令,或者各种语言里的库比如go里用chardet
发表于 2023-12-10 06:29:44 | 显示全部楼层
回复 4# 小白龙


    powershell也有库
Install-Module -Name EncodingAnalyzer
 楼主| 发表于 2023-12-10 06:57:55 | 显示全部楼层
回复 6# wanghan519


    感谢推荐,
我找到了下面链接的小工具, 很不错, 但是编码叫法不同, 还得处理一下
http://www.bathome.net/redirect. ... 7518&pid=276615
 楼主| 发表于 2023-12-10 06:58:43 | 显示全部楼层
回复 5# wanghan519


     file命令 怎么用?
发表于 2023-12-10 07:33:41 | 显示全部楼层
本帖最后由 wanghan519 于 2023-12-10 07:40 编辑

回复 8# 小白龙


     file需要linux环境,也有打包成exe的,使用如图
 楼主| 发表于 2023-12-10 07:44:28 | 显示全部楼层
回复 9# wanghan519

有点复杂, 感觉还是went大佬的code更小巧就是编码叫法不一样, 在PS中还得修改
发表于 2023-12-10 07:55:59 | 显示全部楼层
回复 10# 小白龙


    呃,图中也不算复杂吧,第一句创建utf8编码的文件a.txt
2. 用iconv转utf8到gbk存成b.txt,这里各种编码随便转,也可以改成用.net那套东西
3. 4. 检测文件编码,用file
5. 6. 检测文件编码,用powershell
如有需要,也可以问一下ai,让他用go写个检测编码并转换的exe,一般是用chardet,写出来的基本直接可以编译成exe用
大佬写的也好用,怎么方便怎么来吧。。。
发表于 2023-12-11 00:15:49 | 显示全部楼层
回复 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])
复制代码

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-12-11 18:15:53 | 显示全部楼层
回复 12# Five66


    感谢楼上大佬, 要是能改源码就好了, 或者在源码中加个 -ps 参数, 输出就是ps的编码名
发表于 2023-12-12 00:06:07 | 显示全部楼层
回复 13# 小白龙


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:25 , Processed in 0.020695 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表