2010-11-08 30 views
8

Tôi đang sử dụng vbscript để trích xuất dữ liệu từ db2 và ghi vào tệp. Viết vào tệp như:Unicode tới UTF-8

Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True) 

tạo tệp ở dạng unicode. Nhưng đó là tệp xml và nó sử dụng UTF-8. Vì vậy, khi tôi mở tệp xml bằng MS XML Notepad, nó sẽ phát ra lỗi: 'Giá trị thập lục phân 0x00 là một ký tự không hợp lệ'

Vì vậy, tôi mở tệp văn bản này bằng TextPad và tiết kiệm UTF-8. Sau đó XML mở ra mà không có bất kỳ vấn đề gì. Tôi có thể chuyển đổi tập tin từ Unicode sang UTF-8 bằng vbScript không?

+1

'unicode' có nghĩa là gì trong vbscript? Mã hóa nào nó thực sự sử dụng? –

+1

vbscript có thể ghi tệp theo mã hóa UTF-16 làm mặc định. UTF-16 sẽ có 0x00 trong tất cả các nơi như là byte bậc cao trong văn bản phương Tây. Và, không phải là pedantic, nhưng UTF-8 * là * Unicode; nó là một chương trình mã hóa Unicode cụ thể. – DaveE

+0

Một trong hai câu trả lời dưới đây có giúp/làm việc cho bạn không? :-) – stealthyninja

Trả lời

16

Sử dụng đối tượng Luồng để lưu tệp của bạn bằng bộ ký tự utf-8 có thể hoạt động tốt hơn cho bạn; đây là một hàm .vbs đơn giản mà bạn có thể kiểm tra trên dữ liệu của mình:

Option Explicit 

Sub Save2File (sText, sFile) 
    Dim oStream 
    Set oStream = CreateObject("ADODB.Stream") 
    With oStream 
     .Open 
     .CharSet = "utf-8" 
     .WriteText sText 
     .SaveToFile sFile, 2 
    End With 
    Set oStream = Nothing 
End Sub 

' Example usage: ' 
Save2File "The data I want in utf-8", "c:\test.txt" 
0

Vâng, trong một số trường hợp, chúng ta cần thực hiện điều này trong WSH trong máy không có ADO. Trong trường hợp này, hãy nhớ rằng WSH không tạo tệp theo định dạng UTF-8 (phương thức CreateTextFile không hoạt động với UTF-8), nhưng hoàn toàn có thể thao tác tệp UTF-8 (dữ liệu phụ thêm). Nghĩ về điều này, tôi đã tìm ra một giải pháp không chính thống. Thực hiện theo các bước sau:

1) Mở NOTEPAD trống, nhấp vào TẬP_TIN> LƯU AS, nhập tên cho tệp (như UTF8FileFormat.txt, ví dụ), thay đổi trường "Mã hóa" thành UTF-8 và nhấp vào [Tiết kiệm]. Rời khỏi NOTEPAD.

2) Trong WSH của bạn, bạn sẽ sử dụng UTF8FileFormat.txt để tạo tệp văn bản UTF8 của mình. Để làm điều này, sau khi khai báo FileSystemObject của bạn, sử dụng phương thức CopyFile để sao chép tệp UTF8FileFormat.txt sang tệp mới (nhớ sử dụng tùy chọn Ghi đè) và, sau đó, sử dụng phương thức OpenTextFile để mở tệp mới của bạn với tùy chọn ForAppending và NoCreate. Sau này, bạn sẽ có thể viết trong tệp này bình thường (như trong phương thức CreateTextFile). Tệp mới của bạn sẽ ở định dạng UTF-8. Dưới đây là một ví dụ:

'### START 
' ### REMEMBER: You need to create the UTF8FileFormat.txt file in a blank 
' ###   NOTEPAD with UTF-8 Encoding first. 
    Unicode=-1 : ForAppending=8 : NoCreate=False : Overwrite=True 
    set fs = CreateObject("Scripting.FileSystemObject") 
    fs.CopyFile "UTF8FileFormat.txt","MyNewUTF8File.txt",Overwrite 
    set UTF8 = fs.OpenTextFile("MyNewUTF8File.txt", ForAppending, NoCreate) 
    UTF8.writeline "My data can be writed in UTF-8 format now" 
    UTF8.close 
    set UTF8 = nothing 
'### END 
+0

Đó chỉ là thông tin sai lệch vô nghĩa/nguy hiểm. Việc thêm một BOM vào một chuỗi được mã hóa ANSI duy nhất không ** không chuyển đổi nó thành UTF-8 một cách kỳ diệu. –