【问题标题】:Text encoding issue with PowershellPowershell 的文本编码问题
【发布时间】:2019-05-21 15:58:14
【问题描述】:

我正在尝试将存储在文本文件中的密码转换为 SecureString。这是我正在尝试的:

$pwdPath = 'C:\Password.txt'
$pwd = (ConvertTo-SecureString -Force -AsPlainText (Get-Content $pwdPath))

当我这样做时,密码不正确,当我尝试使用它时出现错误。但是,如果我直接在命令行中传入文件的内容:

那我们很好。起初我以为文件的末尾可能有一个额外的换行符。但是,我尝试使用.Trim() 和所有这些东西。如果我查看文件的长度与字符串的长度,我会得到一个线索:

文件的字节数是字符串的两倍。所以,可能是某种编码问题。如果我查看前几个字节:

我不是文本编码专家,但看起来像是基于 UTF-16 的编码(每个字符两个字节),开头没有 BOM(97 是 a,52 是 4,等等)。我尝试了各种方法将此文件“转换”为与ConvertTo-SecureString 兼容的文件,但到目前为止(例如Get-Content $pwdPath | Set-Content -Encoding ASCII ./test.txt)我还没有找到任何导致有效密码的内容。

【问题讨论】:

  • Get-Content $pwdPath -Encoding Unicode
  • @PetSerAl 工作,谢谢!!
  • 你是如何创建文件的?
  • @js2010 我没有。这是 Service Fabric 创建的用于与 docker 容器共享证书的文件。
  • 这种类型的文件偶尔会在窗口中弹出。信不信由你,记事本可以打开它们,然后用 bom 将它们保存为 unicode。或者只是(get-content -encoding unicode file) | set-content -encoding unicode file2

标签: powershell encoding


【解决方案1】:

因此,根据@PetSerAl,要访问 unicode no bom 文件,因为 powershell 不如记事本聪明:

Get-Content $pwdPath -Encoding Unicode

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2016-08-02
    相关资源
    最近更新 更多