有没有办法让 VS Code 不替换未知的文本字符?
Is there a way to make VS Code not replace unknown text characters?
我目前正在使用 VS 代码编写 PowerShell 脚本。作为此脚本的一部分,REGEX 用于 replace/remove 一个非典型字符,该字符经常出现在数据中并导致后续问题。字符是 (U+2019),当在代码中打开脚本时,它会被永久替换为 (U+FFFD)
因此该行:
$user.Name = $user.Name -Replace "'|\’|\(|\)|\s+",""
永久变为:$user.Name = $user.Name -Replace "'|\�|\(|\)|\s+",""
直到手动更改。看到文件打开后我可以粘贴 U+2019 字符,然后 运行 代码,我假设 VS 代码可以很好地解释它,问题在于加载文件。是否有一些选项我可以设置在打开文件时停止替换它吗?
看起来这一切都归结为编码。 Visual Studio 代码默认使用 UTF-8,通常可以正确处理 saving/viewing Unicode。
如果问题出在打开文件上,那么就是Visual Studio代码在打开文件时误解了文件编码。您可以通过 VS Code 中的设置更改编码 (Configuring VS Code encoding) 以更改文件特定编码(例如 UTF-8、UTF-8BOM、UTF-16LE 等),方法是更改 "files.encoding"
设置。
"files.encoding": "utf8bom"
如果问题出在保存 文件上,则它被保存为 ASCII(又名。Windows-1252)而不是正确的 UTF-8 或相等的。保存时,该字符将替换为下次打开时显示的替换字符 (U+FFFD)。
注意:用于 Windows PowerShell v5.1 的默认编码是 Windows-1252,这可能是保存带有特殊字符的脚本可能不起作用的原因。 PowerShell Core v6+ 默认使用 UTF-8。
如果我在 Vscode 中保存为 Windows 1252 编码,我会在下次打开时看到字符 "’"
变为 �
。我认为问题是 Vscode 无法识别 Windows 1252。它以 UTF8 格式打开它。如果您使用 Windows 1252 编码重新打开,它会正确显示。其他编码工作正常,甚至可以显示字符。这包括 utf8 no bom.
即使是 Powershell 5 在 Windows 1252 上也没有这个问题,只有 Vscode。 Powershell 5 中的 Set-content 和 get-content 默认为 Windows 1252.
"’" | set-content file
get-content file
’
Powershell 7 实际上会遇到同样的问题:
get-content file
�
就我而言,打开 VS Code 设置“文件:自动猜测编码”已解决读取和保存问题。
我目前正在使用 VS 代码编写 PowerShell 脚本。作为此脚本的一部分,REGEX 用于 replace/remove 一个非典型字符,该字符经常出现在数据中并导致后续问题。字符是 (U+2019),当在代码中打开脚本时,它会被永久替换为 (U+FFFD)
因此该行:
$user.Name = $user.Name -Replace "'|\’|\(|\)|\s+",""
永久变为:$user.Name = $user.Name -Replace "'|\�|\(|\)|\s+",""
直到手动更改。看到文件打开后我可以粘贴 U+2019 字符,然后 运行 代码,我假设 VS 代码可以很好地解释它,问题在于加载文件。是否有一些选项我可以设置在打开文件时停止替换它吗?
看起来这一切都归结为编码。 Visual Studio 代码默认使用 UTF-8,通常可以正确处理 saving/viewing Unicode。
如果问题出在打开文件上,那么就是Visual Studio代码在打开文件时误解了文件编码。您可以通过 VS Code 中的设置更改编码 (Configuring VS Code encoding) 以更改文件特定编码(例如 UTF-8、UTF-8BOM、UTF-16LE 等),方法是更改 "files.encoding"
设置。
"files.encoding": "utf8bom"
如果问题出在保存 文件上,则它被保存为 ASCII(又名。Windows-1252)而不是正确的 UTF-8 或相等的。保存时,该字符将替换为下次打开时显示的替换字符 (U+FFFD)。
注意:用于 Windows PowerShell v5.1 的默认编码是 Windows-1252,这可能是保存带有特殊字符的脚本可能不起作用的原因。 PowerShell Core v6+ 默认使用 UTF-8。
如果我在 Vscode 中保存为 Windows 1252 编码,我会在下次打开时看到字符 "’"
变为 �
。我认为问题是 Vscode 无法识别 Windows 1252。它以 UTF8 格式打开它。如果您使用 Windows 1252 编码重新打开,它会正确显示。其他编码工作正常,甚至可以显示字符。这包括 utf8 no bom.
即使是 Powershell 5 在 Windows 1252 上也没有这个问题,只有 Vscode。 Powershell 5 中的 Set-content 和 get-content 默认为 Windows 1252.
"’" | set-content file
get-content file
’
Powershell 7 实际上会遇到同样的问题:
get-content file
�
就我而言,打开 VS Code 设置“文件:自动猜测编码”已解决读取和保存问题。