Winforms 运行时未正确显示表单字符-VS代码PowerShell

Winforms 运行时未正确显示表单字符-VS代码PowerShell,winforms,powershell,visual-studio-code,Winforms,Powershell,Visual Studio Code,我正在用powershell制作表单应用程序。我在标签中正确显示字符“æ”、“ø”、“å”时遇到问题。请参见下面的屏幕抓图了解它们的显示方式。似乎存在某种类型的编码问题,而且由于Powershell在内存中将字符保存为utf-16,我猜问题出在我使用的System.Windows.Forms.Label上 Add-Type -AssemblyName System.Windows.Forms $Form = New-Object system.Windows.Forms.Form $Form.W

我正在用powershell制作表单应用程序。我在标签中正确显示字符“æ”、“ø”、“å”时遇到问题。请参见下面的屏幕抓图了解它们的显示方式。似乎存在某种类型的编码问题,而且由于Powershell在内存中将字符保存为utf-16,我猜问题出在我使用的
System.Windows.Forms.Label

Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$Form.Width = 800
$Form.Height = 500
$Form.BackColor = "#dff3ee" #"#00554b"
$Form.AutoSize = $false
$Form.StartPosition = "CenterScreen"
$Info= New-Object System.Windows.Forms.Label
$Info.Width = 250
$Info.Height = 70
$Info.AutoSize = $false
$Info.Location = New-Object System.Drawing.Point(20,20)
$Info.Font = "Arial Unicode MS, 9"
$Info.Text = "Why is this æ ø å displayed wrong"
$Form.Controls.AddRange(@($Info))
$Form.ShowDialog()
$pVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.18362.145
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.145
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


我无法解决这个问题。但是我正在用PS2EXE将其打包到一个.exe中,然后字符将正确显示。因为它在prod中是正确的,所以我不再为此费心了。

当我在Windows PowerShell ISE中粘贴代码并保存它时,它会按预期工作,但当我在VS code中粘贴代码并保存它时,在运行时它不会正确显示这些字符

这取决于保存文件的工具。如果使用Windows PowerShell ISE,则会使用带BOM的UTF-8(或带签名的UTF-8)保存文件,但当使用VS代码时,默认设置是使用带BOM的UTF-8(或不带BOM的UTF-8,或不带签名的UTF-8)保存文件

因此,区别在于文件编码,或者更准确地说,是有还是没有

要修复VS代码中的问题,请执行以下操作:

  • 开放VS代码
  • 在状态栏的右侧,单击“编码”。(默认为UTF-8)
  • 在顶部打开的菜单中,选择“使用编码保存”
  • 从下一个菜单中,选择UTF-8和BOM

确保您已将powershell文件保存为Unicode格式。该文件保存为UTF-8,因此只需共享一个。对我来说效果与预期一样。看。我刚刚复制了你的代码并粘贴到Windows PowerShell ISE中并运行它。这是什么魔法…在ISE中它也显示了我所期望的。使用记事本+,并使用编码类型更改格式。我发现它是解决这个问题最简单的方法。@RanadipDutta不仅仅是NP++,任何具有此功能的文本编辑器,包括MS Word、VS或VS代码。但是,如果使用PowerShell ISE,则无需更改任何内容,它将与BOM一起保存。但是,如果您使用VS代码,那么在VS代码中更改设置会更好、更容易,因为您不需要更改每个文件的编码。