2017-01-30 58 views
4

我正在對一系列PS1 & PSM1文件進行一些文本流處理,並且遇到了一些使用智能引號和em-dashes的問題(永遠不要從剪切和粘貼代碼MS腳本專家博客)。我認爲這個問題是編碼,所以我看了,我有文件的ASCII & UTF8,但當然都有我的時髦的文字問題。所以我做了一些替換,我有這個工作,但我不知道我是否也不應該標準化一個編碼,如果是,哪一個?什麼是PS1文件的正確編碼

+3

PowerShell腳本應該運行良好,無論該文件是否被編碼爲ASCII(ANSI,技術上),UTF-8或UTF-16 。這個問題很可能是由於一些時髦的字符從你的源複製/粘貼。 *總是*清理你從其他地方複製的代碼。 –

+1

是的,經驗教訓很難! ;)如果沒有針對任何特定編碼的參數,我只會強迫它們全部使用UTF8,只是爲了一致性。 – Gordon

回答

1

不是你的問題的直接答案,但你可能會發現它有用,但我有一個工具,我寫了處理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 
+0

哦,那是好東西! – Gordon

相關問題