Mã hóa nào để Ä hoạt động


12

Tôi đang viết một ứng dụng nhỏ trong VB.net cho phép tôi dễ dàng tạo "tài khoản Windows 7" bằng mật khẩu, thay vì sử dụng bảng điều khiển. Vấn đề tôi gặp phải là khi tôi tạo một tập tin dơi trong VB.net bằng cách sử dụng mã hóa UTF-8 thì nó không được viết như là giả sử. Tôi đã thử tất cả các mã hóa tôi có thể tìm thấy nhưng không thể làm cho nó hoạt động.

Nếu bất cứ ai có ý tưởng về lý do tại sao tôi nhận được điều này xin vui lòng cho tôi biết. Thanx trước!


hãy thử đăng lên stackoverflow.com và hiển thị tập lệnh của bạn.
Toby Allen

1
@Toby Allen Vâng, đó không thực sự là một câu hỏi lập trình mà là một câu hỏi về mã hóa văn bản, vấn đề tương tự xảy ra khi tôi tạo một tệp .bat theo cách "bình thường".
kagstrom2100

Câu trả lời:


12

Chỉnh sửa: Tôi đã sai;)
cmd.exekhông chấp nhận UTF-8 nhưng bạn cần phải chắc chắn để lưu nó mà không cần sự BOMvào đầu của tập tin.

Đây là một thử nghiệm thứ hai. Bạn có thể sử dụng chcp 65001ở đầu tập tin bó của bạn.

nhập mô tả hình ảnh ở đây


Một tệp bó không thể là loại UTF-8. Nó cần phải là ASCII. Cmd.exechỉ không chấp nhận định dạng khác. Tôi đã làm một bài kiểm tra nhỏ và bạn có thể sử dụng các nhân vật của mình nhưng nó cần một số công việc.

Tạo một tập tin test.batvới echo Å Ä Ö. Lưu nó với định dạng ANSI/ASCII. Mở a cmd.exevà đảm bảo việc cmd.exesử dụng của bạn Lucida Console(để hiển thị các ký tự Unicode).

Khi bạn nhập tệp, nó sẽ hiển thị các ký tự dưới dạng các ký tự DOS cũ. Bạn có thể xem một biểu đồ dịch thuật ở đây .

Khi bạn chuyển sang trang "Windows Ansi" - trang mã (tức là tiếng Tây Âu Latinh) với chcp 1252các ký tự được hiển thị chính xác. Nếu họ cũng được chuyển đến các tiện ích tương ứng của họ phụ thuộc vào tiện ích đó.

Nhưng tại sao bạn lại tạo một tệp bó cho việc này? Bạn có thể chỉ viết mã trong VB.net không?

cmd.exe


Chỉnh sửa 2 #:

Đây là cách bạn thiết lập Lucida Consoletrong cmd.exe:

Bảng điều khiển Lucida


BOM3 ký tự ở đầu tệp UTF-8. ( \xEF\xBB\xBF).
Trong VB.net bạn sẽ tạo ra một tập tin mà không cần một BOMnhư thế này:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using

Hi và thanx cho câu trả lời. Trong ứng dụng vb.net của tôi, tôi đang cố gắng tạo một tập tin Tôi sẽ lấy bản dịch tiếng Anh thành một nhóm.
kagstrom2100

Chỉ cần nghĩ rằng đi qua một tập tin .bat là một chút khi bạn có thể làm điều này trực tiếp từ VB.net. Giống như ở đây . Rất nhiều ví dụ trong Google . Vì vậy, không cần phải tạo một .bat như người trung gian. Và với những ví dụ đó, bạn có thể cung cấp tên Unicode trực tiếp cho chức năng Windows. (Trừ khi bạn cần chạy .bat vào một thời điểm khác biệt với ứng dụng VB.net của bạn vì một số lý do?)
Rik

Vâng, tôi đã tìm kiếm một cách để làm điều này trong VB.net trên Google trong nhiều ngày, mặc dù tôi không tìm thấy cách nào để làm điều đó. Tôi đã thử ví dụ bạn liên kết và nó dường như không hoạt động. Làm cách nào để đảm bảo rằng tệp .bat không sử dụng BOM? Ngoài ra Lucida Console là gì? Thông tin duy nhất tôi có thể tìm thấy về nó là một phông chữ. Khi tôi thử chính xác những gì bạn đã làm trong ví dụ / hình ảnh thứ hai, tôi nhận được i.imgur.com/6sh20j0.jpg
kagstrom2100

Tôi đã thêm vào câu trả lời của mình để bao gồm Lucida Consolevà tạo tệp mà không cần BOM(Chỉnh sửa # 2, ở dưới cùng). Nhưng việc tạo người dùng này thông qua net usercông việc trên dấu nhắc lệnh? Và những gì không hoạt động nếu bạn tạo nó thông qua VB.net? Đối với điều này, chúng tôi sẽ cần một số mã ví dụ (hoặc một câu hỏi riêng) bởi vì điều này sẽ hoạt động. (BTW bạn đã liên kết hình ảnh của tôi, không phải của bạn, tôi nghĩ, trong nhận xét của bạn)
Rik

2
@JohnLBevan Vâng, bạn nói đúng. Rõ ràng findkhông xử lý đầu vào UTF-8 không quá tốt. Nhưng bạn có thể sử dụng findstr. Như thế này:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik

2

Điều đã khắc phục điều này đối với tôi là lưu tệp dưới dạng UTF-8 mà không cần BOM và sử dụng mã này

@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add

Thứ tôi không sử dụng trước đây là @echo vì vậy và sử dụng chcp 65001 là thứ đã sửa nó! Thanx quá Rik cho tất cả sự giúp đỡ :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.