2010-09-27 27 views
10

Với PowerShell 2.0:Powershell 2.0 tạo null giữa các nhân vật

ghi-đầu ra "abcd" >> mytext.txt

viết: a nul b nul c nul d nul

od -c show nul là số không nhị phân thực, \ 0, hoặc: a \ 0 b \ 0 c \ 0 d \ 0 (và \ r \ 0 \ n \ 0)

Tôi đang cố gắng tạo một số SQL, vì vậy tôi không nghĩ rằng điều này sẽ làm. Bất kỳ ý tưởng về những gì đang xảy ra và làm thế nào để sử dụng ghi-đầu ra để chỉ nhận được các ký tự được chỉ định?

Cảm ơn!

+0

Cảm ơn bạn đã đặt câu hỏi này !! –

Trả lời

15

Điều này là do ghi-đầu ra mặc định thành mã hóa văn bản UTF-16, là 2 byte cho mỗi ký tự. Khi bạn xử lý văn bản phù hợp với phạm vi mã ASCII, byte thứ 2 của mỗi ký tự sẽ bằng không.

Điều này được kiểm soát bởi biến số toàn cầu $OutputEncoding, vì vậy bạn có thể đặt thành ASCII.

Một tùy chọn khác là sử dụng lệnh ghép ngắn cmdlet, có tham số mã hóa rõ ràng. Tôi khuyên bạn nên sử dụng điều này thay vì chuyển hướng đầu ra, vì điều đó giúp bạn không thay đổi môi trường của mình trên toàn cầu (bằng cách đặt biến tùy chọn toàn cầu $OutputEncoding)

Sử dụng Tệp ngoài và đặt mã là ASCII, ví dụ của bạn sẽ trông giống như này:

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

Lưu ý rằng không phải tất cả các ký tự đều thể hiện trong ASCII và bạn nên xác định đây có phải là mã hóa thích hợp cho mục đích của mình hay không. Cá nhân tôi thường sẽ đi cho UTF-8, vì nó là tương đương ASCII khi các ký tự nằm trong phạm vi ASCII từ 0-127, nhưng cũng xử lý các ký tự quốc tế. Obligatory link about text encoding.

+0

Cảm ơn bạn đã trả lời nhanh chóng và đầy đủ. Trong thế kỷ 21 không bao giờ nên mong đợi ASCII - như là địa chỉ rất tốt bởi bài viết Joel trích dẫn ở trên! – cvsdave

+0

Chỉ dành cho bất kỳ ai xem đây là kết quả tìm kiếm trong tương lai, tệp ngoài hỗ trợ cờ -append, vì vậy những gì tôi sẽ sử dụng là: "abcd" | out-file "mytext.txt" -Encoding ASCII -append – cvsdave

+0

Cảm ơn bạn đã trả lời câu hỏi này !! Tôi đang học Powershell từng chút một. Câu trả lời của bạn đã cứu tôi rất nhiều thời gian! –

2

Powershell hoạt động theo chế độ mặc định 16 bit theo mặc định và tuy nhiên bạn đang đọc tệp có khả năng ở định dạng 8 bit. Bạn có thể giải thích sql trong một ứng dụng có thể đọc UTF16, hoặc, vì >> là cú pháp đường cho lệnh ghép ngắn, bạn có thể làm như sau:

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

Cảm ơn bạn đã trả lời nhanh chóng - câu trả lời tôi cần, nhưng tôi chỉ có thể đánh dấu câu trả lời là đã được chấp nhận. – cvsdave

Các vấn đề liên quan