【问题标题】:Encoding problems when concatenating with Powershell与 Powershell 连接时的编码问题
【发布时间】:2015-01-29 06:21:39
【问题描述】:

在一堆文件中,我想将文件名以 1 开头的所有文件连接到一个名为 1.txt 的文本文件中。源文件的编码是 UTF16-LE,这也应该是目标文件的编码。但是使用我的 powershell 脚本(下面的代码)会生成一个带有缺陷特殊符号(元音变音等)的 UTF-8 文件

这是我的代码:

Powershell.exe cat  Disc:\data\files\1\filename-1* > Path:\here\1.txt

我发现了几种使用 Get-Content 和 Out-File 的方法,但无法使这些命令适应我的通配符需求。据我了解,cat 是 get-content 的标准别名,所以我想知道为什么我不能只用 get-content 替换 cat。此外,get-content 有一个 -Encoding CharSet 参数,但更改我的代码如下:

Powershell.exe cat  Disc:\data\files\1\filename-1* > Path:\here\1.txt -encode Unicode

(这是 UTF-16 格式 little-endian 字节顺序的字符集)不会改变任何事情。 BigEndianUnicode 或 UTF8 也没有。

感谢您的帮助!

【问题讨论】:

    标签: windows powershell encoding concatenation utf-16


    【解决方案1】:

    在使用重定向运算符 (>) 时,您无法指定编码。请改用Out-File cmdlet:

    Get-Content C:\path\to\input* | Out-File D:\path\to\output.txt -Encoding Unicode
    

    【讨论】:

    • 谢谢您-很高兴知道!但是不知何故,您的代码也无法正常工作。这是我所做的:'Powershell.exe Get-Content J:\path\content\name1* -Encoding Unicode | Powershell.exe Out-File J:\newpath\1.txt -Encoding Unicode' 我在管道之后尝试了使用和不使用 Powershell.exe,但这似乎是必要的。我也只尝试了一个 -Encoding ,就像您的代码一样。但我得到的唯一结果是一个空文件 1.txt
    • @Daniel 在我的回答中,您究竟在哪里看到Get-Content -Encoding Unicodepowershell.exe?该代码旨在从 PowerShell 提示符运行。如果你想从其他地方运行它(例如命令提示符),你需要像这样运行它:powershell.exe -Command "& { Get-Content ... }"
    • @Daniel 也许您可以提供您尝试阅读和保存的文本示例,以便我们查看。我用日语尝试了 Ansgar 的代码,它成功了。
    • @AnsgarWiechers 对不起,我想我已经提到了我打算在批处理文件中使用代码的意图;)像你说的那样编辑后终于成功了,非常感谢。
    猜你喜欢
    • 2014-04-02
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多