vscode powershell streamlit 系統的編碼
Table of contents
背景
設定 VS Code
VS Code 的預設編碼方式為 UTF-8,不含 BOM。
若要設定 VS Code 的編碼,請移至 VS Code 設定(Ctrl+、),並設定 “files.encoding” 設定:
"files.encoding": "utf8bom"
一些可能的值為:
- utf8: [UTF-8] 不含 BOM
- utf8bom: [UTF-8] 搭配 BOM
- utf16le: 小端 [UTF-16]
- utf16be: 大端 [UTF-16]
- windows1252:[Windows-1252]
您應該會在 GUI 檢視中取得此專案的下拉式清單,或在 JSON 檢視中取得該清單的完成。
您也可以盡可能將下列內容新增至自動偵測編碼:
"files.autoGuessEncoding": true
如果您不想要這些設定會影響所有文件類型,VS Code 也允許個別語言的組態。 將設定放在 [[<language-name>]]
字段中,以建立特定語言設定。 例如:
"[powershell]": {
"files.encoding": "utf8bom",
"files.autoGuessEncoding": true
}
您也可以考慮安裝適用於 Visual Studio Code 的 Gremlins 追蹤器。 此延伸模組會顯示某些容易損毀的 Unicode 字元,因為它們是看不見的,或看起來像其他一般字元。
設定 PowerShell
PowerShell 的預設編碼會因版本而異:
PowerShell 6+
在 PowerShell 6+ 中,預設編碼方式是所有平台上沒有 BOM 的 UTF-8。
在 Windows PowerShell 中,預設編碼通常是 Windows-1252,這是 latin-1 的延伸模組(也稱為 ISO 8859-1)。
PowerShell 5+
在 PowerShell 5+ 中,您可以使用下列方式找到預設編碼方式:
[psobject].Assembly.GetTypes() | Where-Object { $_.Name -eq 'ClrFacade'} |
ForEach-Object {
$_.GetMethod('GetDefaultEncoding', [System.Reflection.BindingFlags]'nonpublic,static').Invoke($null, @())
}
可能的結果如下:
BodyName : big5
EncodingName : 繁體中文 (Big5)
HeaderName : big5
WebName : big5
WindowsCodePage : 950
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 950
下列 腳本 可用來判斷沒有 BOM 之腳本的 PowerShell 會話推斷的編碼方式。
$badBytes = [byte[]]@(0xC3, 0x80)
$utf8Str = [System.Text.Encoding]::UTF8.GetString($badBytes)
$bytes = [System.Text.Encoding]::ASCII.GetBytes('Write-Output "') + [byte[]]@(0xC3, 0x80) + [byte[]]@(0x22)
$path = Join-Path ([System.IO.Path]::GetTempPath()) 'encodingtest.ps1'
try
{
[System.IO.File]::WriteAllBytes($path, $bytes)
switch (& $path)
{
$utf8Str
{
return 'UTF-8'
break
}
default
{
return 'Windows-1252'
break
}
}
}
finally
{
Remove-Item $path
}
您可以更普遍地使用設定檔設定,將 PowerShell 設定為使用指定的編碼方式。 請參閱下列文章:
- 在 Stack Overflow 上上有關 PowerShell 編碼的 答案。
- 關於在 PowerShell中處理無 BOM UTF-8 輸入的 部落格文章。
- 您無法強制 PowerShell 使用特定的輸入編碼。 PowerShell 5.1 和以下版本,在 Windows 上執行的地區設定設為 en-US,當沒有 BOM 時,預設為 Windows-1252 編碼。
- 其他地區設定可能會使用不同的編碼方式。 為了確保互操作性,最好使用 BOM 以 Unicode 格式儲存腳本。
::: 重要
您擁有的任何其他觸控 PowerShell 腳本工具,都可能會受到編碼選擇的影響,或將腳本重新編碼為另一種編碼。