แก้ไข:ผมผิด;)
cmd.exe
ไม่ยอมรับ UTF-8 แต่คุณต้องให้แน่ใจว่าได้บันทึกไว้โดยไม่ต้องBOM
ที่จุดเริ่มต้นของแฟ้ม
นี่คือการทดสอบครั้งที่สอง คุณสามารถใช้chcp 65001
ที่จุดเริ่มต้นของแบตช์ไฟล์ของคุณ
ไฟล์แบตช์ไม่สามารถเป็นประเภท UTF-8 จำเป็นต้องเป็น ASCII Cmd.exe
เพียงแค่ไม่ยอมรับรูปแบบอื่น ฉันทำแบบทดสอบเล็ก ๆ และคุณสามารถใช้ตัวละครของคุณได้ แต่มันต้องใช้งานบ้าง
ทำให้ไฟล์ที่มีtest.bat
บันทึกที่มีรูปแบบecho Å Ä Ö
ANSI/ASCII
เปิดcmd.exe
และตรวจสอบการcmd.exe
ใช้งานของคุณLucida Console
(เพื่อแสดงอักขระ Unicode)
เมื่อคุณพิมพ์ไฟล์มันจะแสดงตัวละครเป็นตัวละคร DOS ตัวเก่า คุณสามารถดูกราฟการแปลที่นี่
เมื่อคุณเปลี่ยนเป็น "Windows Ansi" - หน้ารหัส (เช่นยุโรปตะวันตกละติน) ด้วยchcp 1252
อักขระจะแสดงอย่างถูกต้อง หากพวกเขายังได้รับการถ่ายโอนไปยังยูทิลิตี้นั้นขึ้นอยู่กับยูทิลิตี้ที่
แต่ทำไมคุณสร้างแบทช์ไฟล์สำหรับสิ่งนี้ คุณไม่สามารถเขียนโค้ดใน VB.net ได้หรือไม่
แก้ไข 2 #:
นี่คือวิธีที่คุณตั้งไว้Lucida Console
ในcmd.exe
:
BOM
มี 3 ตัวอักษรที่จุดเริ่มต้นของไฟล์ UTF-8 ( \xEF\xBB\xBF
)
ใน VB.net คุณจะสร้างไฟล์โดยไม่มีสิ่งBOM
นี้:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
'^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
sink.WriteLine("...")
End Using