【问题标题】:Is there a way to make VS Code not replace unknown text characters?有没有办法让 VS Code 不替换未知的文本字符?
【发布时间】:2020-04-27 23:46:06
【问题描述】:

我目前正在使用 VS 代码编写 PowerShell 脚本。作为此脚本的一部分,REGEX 用于替换/删除一个非典型字符,该字符经常出现在数据中并导致后续问题。字符是 (U+2019),当脚本在代码中打开时,它被永久替换为 (U+FFFD)

因此行: $user.Name = $user.Name -Replace "'|\’|\(|\)|\s+",""

永久变为:$user.Name = $user.Name -Replace "'|\�|\(|\)|\s+",""

直到它被手动更改。看到打开文件后我可以粘贴 U+2019 字符然后运行代码,我假设 VS 代码可以很好地解释它,问题在于加载文件。是否有一些选项可以设置为当我打开文件时停止替换它?

【问题讨论】:

  • Powershell 5 或 ISE 无法识别 UTF8NoBom。

标签: powershell visual-studio-code unicode


【解决方案1】:

看起来这一切都归结为编码。默认情况下,Visual Studio Code 使用 UTF-8,并且通常可以正确处理保存/查看 Unicode。

如果问题在于打开文件,则可能是 Visual Studio Code 在打开文件时误解了文件编码。您可以通过更改 "files.encoding" 设置,通过 VS Code 中的设置更改文件特定编码(例如 UTF-8、UTF-8BOM、UTF-16LE 等)的编码(Configuring VS Code encoding)。

"files.encoding": "utf8bom"

如果问题在于保存文件,那么它被保存为 ASCII(又名 Windows-1252),而不是正确的 UTF-8 或同等格式。保存时,该字符将替换为替换字符 (U+FFFD),该替换字符将在下次打开时显示。

注意:Windows PowerShell v5.1 使用的默认编码是 Windows-1252,这可能是使用特殊字符保存脚本可能不起作用的原因。 PowerShell Core v6+ 默认使用 UTF-8。

【讨论】:

  • 感谢您的回复。仅打开文件是一个问题。通过根据您的建议更改编码,我能够明白它是否将其显示为错误的表示但不会更改文件,而且我不必担心每次我想工作时都必须替换它在 VS 代码中。
【解决方案2】:

在我的例子中,打开 VS Code 设置“文件:自动猜测编码”已经解决了读取和保存问题。

【讨论】:

    【解决方案3】:

    如果我在 Vscode 中保存为 Windows 1252 编码,我会看到字符 "’" 在下次打开时更改为 。我认为问题在于 Vscode 无法识别 Windows 1252。它以 UTF8 格式打开它。如果您使用 Windows 1252 编码重新打开,它会正确显示。其他编码工作正常,甚至显示字符。这包括 utf8 no bom。

    Windows 1252 甚至 Powershell 5 都没有这个问题,只有 Vscode。 Powershell 5 中的 set-content 和 get-content 默认为 Windows 1252。

    "’" | set-content file
    get-content file
    
    ’
    

    Powershell 7 实际上也会有同样的问题:

    get-content file
    
    �
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2019-05-09
      相关资源
      最近更新 更多