2010-09-27 63 views
10

隨着的powershell 2.0之間空值:Powershell的2.0生成字符

寫輸出 「ABCD」 >> mytext.txt

寫道:一個NUL b NULÇNUL d NUL

OD -c節目nul作爲一個真正的二進制零,\ 0或:a \ 0 b \ 0 c \ 0 d \ 0(和\ r \ 0 \ n \ 0)

我想要生成一些SQL,不要以爲這會做。任何有關正在發生的事情的想法以及如何使用write-output來獲取指定的字符?

謝謝!

+0

感謝您問這個問題! – 2017-10-23 18:31:04

回答

15

這是因爲寫輸出默認爲UTF-16文本編碼,每個字符2個字節。當您處理符合ASCII代碼頁範圍的文本時,每個字符的第二個字節將爲零。

這受全局變量$OutputEncoding控制,因此您可以將其設置爲ASCII。

另一種選擇是使用cmdlet Out-File,它具有明確的編碼參數。我建議你使用這個來代替輸出重定向,因爲這可以讓你免於全局改變你的環境(通過設置全局首選變量$OutputEncoding

使用Out-File並將編碼設置爲ASCII,你的例子看起來像這樣的:

"abcd" | out-file "mytext.txt" -Encoding ASCII 

請注意,並非所有的字符使用ASCII表示的,你應該確定這是否是你的目的一個適當的編碼。就個人而言,我通常會選擇UTF-8,因爲當字符落在從0-127的ASCII範圍內時它是ASCII等效的,但也處理國際字符。 Obligatory link about text encoding

+0

感謝您的迅速和完整的迴應。在21世紀,人們永遠不應該期待ASCII - 就像上面引用的Joel文章所述的那樣好! – cvsdave 2010-09-27 17:49:33

+0

僅供任何人將其視爲將來的搜索輸出,out-file支持-append標誌,所以我會使用的是:「abcd」| out-file「mytext.txt」-Encoding ASCII -append – cvsdave 2010-09-27 17:56:24

+0

感謝您回答這個問題!我一點一點地學習Powershell。你的回答爲我節省了很多時間! – 2017-10-23 18:33:00

2

默認情況下Powershell以16位unicode工作,但是您正在讀取的文件可能是8位格式。你可以解釋,可以讀取UTF-16,或應用程序的SQL,因爲>>是針對出文件cmdlet的語法糖,你可以做,而不是執行以下操作:

write-output "abcd" | out-file -path mytext.txt -Encoding "UTF8" -Append 
+0

感謝您的快速響應 - 我需要的答案,但我只能將其中一個標記爲已接受。 – cvsdave 2010-09-27 17:50:55