PS1文件的正确编码是什么

Gor*_*don 5 powershell character-encoding

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

小智 6

因为我刚刚在解决编码问题时遇到了这个问题:我有一些编码为 UTF-8 的 PS1 文件,并且 powershell 解释器因某些包含德语元音变音字符的常量字符串而卡住(“\xc3\xa4\xc3\x84\xc3\xb6\xc3 \x96\xc3\xbc\xc3\x9c\xc3\x9f")。出现“意外令牌”错误(在 Windows Server 2016 上运行 PS 5.1)。将 PS1 文件的编码更改为 UTF-8-BOM 后,这个特殊问题就消失了。

\n


Dea*_*gel 3

不是对你的问题的直接答案,但你可能会发现它仍然有用,我有一个我编写的工具来处理 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
Run Code Online (Sandbox Code Playgroud)