PS1文件的正确编码是什么

时间:2017-01-30 15:38:07

标签: powershell character-encoding

我正在对一系列PS1&amp ;;进行一些文本流处理。 PSM1文件,我遇到了一些智能引号和em-dashes的问题(永远不会,从MS Scripting Guy博客剪切和粘贴代码)。我认为问题是编码所以我看了,我有ASCII和amp;的文件UTF8,但当然两个都有我的时髦文本的问题。所以我做了一些替换,我有这个工作,但我想知道我是否也不应该对一种编码进行标准化,如果是,那么哪一种?

3 个答案:

答案 0 :(得分:2)

不是你的问题的直接答案,但你可能会觉得它很有用,我有一个工具,我写的处理PS和SQL脚本,但很快发现人们从他们的电子邮件粘贴,搞砸了大量的东西。我必须实现这一点来纠正这一切,它应该得到一切:

if ($code.IndexOf([Char]0x2013) -gt -1) { $code = $code.Replace(([Char]0x2013).ToString(), "--") }   # en dash
if ($code.IndexOf([Char]0x2014) -gt -1) { $code = $code.Replace(([Char]0x2014).ToString(), "-") }    # em dash
if ($code.IndexOf([Char]0x2015) -gt -1) { $code = $code.Replace(([Char]0x2015).ToString(), "-") }    # horizontal bar
if ($code.IndexOf([Char]0x2017) -gt -1) { $code = $code.Replace(([Char]0x2017).ToString(), "_") }    # double low line
if ($code.IndexOf([Char]0x2018) -gt -1) { $code = $code.Replace(([Char]0x2018).ToString(), "`'") }   # left single quotation mark
if ($code.IndexOf([Char]0x2019) -gt -1) { $code = $code.Replace(([Char]0x2019).ToString(), "`'") }   # right single quotation mark
if ($code.IndexOf([Char]0x201a) -gt -1) { $code = $code.Replace(([Char]0x201a).ToString(), ",") }    # single low-9 quotation mark
if ($code.IndexOf([Char]0x201b) -gt -1) { $code = $code.Replace(([Char]0x201b).ToString(), "`'") }   # single high-reversed-9 quotation mark
if ($code.IndexOf([Char]0x201c) -gt -1) { $code = $code.Replace(([Char]0x201c).ToString(), "`"") }   # left double quotation mark
if ($code.IndexOf([Char]0x201d) -gt -1) { $code = $code.Replace(([Char]0x201d).ToString(), "`"") }   # right double quotation mark
if ($code.IndexOf([Char]0x201e) -gt -1) { $code = $code.Replace(([Char]0x201e).ToString(), "`"") }   # double low-9 quotation mark
if ($code.IndexOf([Char]0x2026) -gt -1) { $code = $code.Replace(([Char]0x2026).ToString(), "...") }  # horizontal ellipsis
if ($code.IndexOf([Char]0x2032) -gt -1) { $code = $code.Replace(([Char]0x2032).ToString(), "`"") }   # prime
if ($code.IndexOf([Char]0x2033) -gt -1) { $code = $code.Replace(([Char]0x2033).ToString(), "`"") }   # double prime
if ($code.IndexOf([Char]0x0009) -gt -1) { $code = $code.Replace(([Char]0x0009).ToString(), "    ") } # tab

答案 1 :(得分:0)

由于我只是在解决编码问题时遇到了这一问题:我有一些编码为UTF-8的PS1文件,而powershell解释器在包含德国变音符号(“äÄööüüÜß”)的一些常量字符串上被阻塞。出现“意外令牌”错误(在Windows Server 2016上运行PS 5.1)。将PS1文件的编码更改为UTF-8-BOM后,此特定问题消失了。

答案 2 :(得分:0)

PS1文件历史上使用Windows-1252作为后备编码。如果存在BOM(用于UTF-8或用于UTF-16),则将使用它。

With Powershell 6,默认编码更改为UTF-8。

要确保ps1文件在新旧版本上都能正常工作,请将其另存为带有BOM的UTF-8。该建议可以在about_Character_Encoding

中找到