【问题标题】:Powershell generating unknown character when echoing to file回显到文件时Powershell生成未知字符
【发布时间】:2013-03-15 17:56:21
【问题描述】:

我正在尝试使用 Powershell 将 3 个纯文本行回显到文件中:

echo "#Generated" > psftp.scp
echo "put test.txt" >> psftp.scp
echo "quit" >> psftp.scp

然后我使用 psftp.exe 批处理模式来运行文件(在 SFTP 中执行命令),但是 psftp 错误地看到无效字符:

psftp: unknown command " ■#"

我错过了什么?我可以在 Windows 记事本中手动输入文件,它 (psftp) 可以工作。无论我将第一行更改为 (#Generated),它都会在第一部分中使用块符号出现此错误。

我尝试在 NotePad++ 中打开“显示所有符号”查看文件,但只在行尾看到 CR 和 LF,这是正常的。

【问题讨论】:

  • 其他人可以验证这一点,但它可能是一个 bom 字符或 windows 在字符串后面包含的东西。如果您使用Out-File,您可以使用-Append 添加文本并使用-Encoding 指定正确的编码。
  • fwiw,字符是 0xFF、0xFE,然后是字母,但它们之间有 0x00。(我不认为那是 unicode)
  • 还有@FrodeF 的评论。作品。如果没有 -encoding ascii,它仍然在文件开头有奇怪的字符。
  • 有谁知道为什么 Powershell 的重定向行为如此令人讨厌?它似乎应该很容易修复,使其行为与 bash 更相似,而不是插入随机字符。我假设有一些原因。

标签: powershell


【解决方案1】:

尝试使用 set/add-content 而不是重定向。您可能还需要设置编码。

"#Generated" | set-content psftp.scp -Encoding Ascii
"put test.txt" | add-content psftp.scp -Encoding Ascii
"quit" | add-content psftp.scp -Encoding Ascii

【讨论】:

  • 我最终做了“默认”编码,这很好。
  • 你知道为什么 powershell 会这样吗?为什么在将命令行字符串重定向到文件时会插入看似随机的字符?
  • 我可以确认,将编码设置为 utf8 对我来说不起作用,但“默认”有效
  • NotePad++ = UTF-8 -- PowerShell UTF8 = UTF-8-BOM -- PowerShell 默认 = UTF-8 -- 在 Notepad++ 中确认的设置
【解决方案2】:

在我的例子中,我是在一个 .cmd 文件中将一个 .ps1 输入到 powershell 中

type script.ps1 | powershell -ExecutionPolicy Bypass

虽然脚本以其他方式运行时没有错误,但以这种方式运行时,由于无效字符,它会在第一行(注释行)抛出语法错误。

我发现如果我使用 wScite 编辑器保存 .ps1 文件,默认为“UTF-8 with BOM”。我将其更改为“UTF-8”,然后将脚本传输到 powershell 工作正常。

【讨论】:

    【解决方案3】:

    与 Out-File 一样,Powershell 5 中“>”和“>>”的默认编码是 UTF16LE(“Unicode”)。我猜 psftp 无法读取? “FF FE”是编码签名或“BOM”。你是如何运行 psftp 的?

    format-hex psftp.scp
    
    
               Path: C:\Users\me\psftp.scp
    
               00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    
    00000000   FF FE 23 00 47 00 65 00 6E 00 65 00 72 00 61 00  .þ#.G.e.n.e.r.a.
    00000010   74 00 65 00 64 00 0D 00 0A 00 70 00 75 00 74 00  t.e.d.....p.u.t.
    00000020   20 00 74 00 65 00 73 00 74 00 2E 00 74 00 78 00   .t.e.s.t...t.x.
    00000030   74 00 0D 00 0A 00 71 00 75 00 69 00 74 00 0D 00  t.....q.u.i.t...
    00000040   0A 00                                            ..
    

    【讨论】:

      猜你喜欢
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多