UTF-8 không có BOM


180

Tôi có các tệp javascript mà tôi cần lưu chúng trong UTF-8 (không có BOM), mỗi khi tôi chuyển đổi chúng sang định dạng chính xác trong Notepad ++ , chúng sẽ được hoàn nguyên về UTF-8 bằng BOM khi tôi mở chúng trong Visual Studio. Làm thế nào tôi có thể ngăn VS2010 làm điều đó?

Một câu hỏi khác, là UTF-8 không có chữ ký trong Visual Studio giống như UTF-8 không có BOM?


13
một tệp được lưu với (utf-8 không có BOM) được hoàn nguyên thành (utf-8 với BOM) .. đây là vấn đề
kabaros


Giải pháp cho vấn đề kabaros rất đơn giản - chỉ cần lưu tệp với visual studio bằng uft-8 mà không cần BOM. Vâng, điều đó là có thể - vì Keavon nhận thấy "UTF-8 không có chữ ký ở gần cuối danh sách." Khá kỳ lạ là utf-8 có chữ ký ở đầu và utf-8 không có chữ ký gần như ở cuối, nhưng ít nhất nó cũng giải quyết được vấn đề bực bội này.
cyriel

Câu trả lời:


227

BOM hoặc Byte Order Mark đôi khi khá khó chịu. Visual Studio không thay đổi tệp trừ khi bạn lưu nó (như Hans đã nói).

Và đây là giải pháp cho vấn đề của bạn: Nếu bạn muốn lưu tệp bằng các mã hóa khác, hãy chọn lưu dưới dạng và mở rộng nút lưu trong hộp thoại tệp và chọn "Lưu bằng mã hóa". Hoặc nếu bạn muốn thoát khỏi cài đặt này vĩnh viễn, chỉ cần mở menu Tệp và chọn "Tùy chọn lưu nâng cao" và ở đó bạn nên chọn "UTF-8 không có chữ ký" (và điều đó cũng đã trả lời câu hỏi cuối cùng của bạn :). Có "UTF-8 không có chữ ký" giống như không có BOM.


11
Tôi đã tự hỏi nếu có một tùy chọn để bật cái này theo mặc định cho tất cả các tệp.
mihai

3
Nó đã lưu tệp đúng cách khi tôi chọn "Lưu bằng mã hóa", nhưng tôi không thấy "Tùy chọn lưu nâng cao" trong menu Tệp của mình, bất kể loại tệp nào tôi đã mở trong trình chỉnh sửa. Hừm ....
Chris Jaynes

20
@ChrisJaynes nhấp chuột phải vào thanh menu, ở vị trí mở, sau đó nhấp vào tùy chỉnh ... lệnh ... (*) menubar: Tệp ... [Thêm lệnh] ... thêm vào "Tùy chọn lưu nâng cao" tôi đặt nó ở ngay phía trên "Lưu lựa chọn"
Tracker1

4
Chà, tôi không có mục "UTF-8 không có chữ ký" ... vậy thì vấn đề là gì?
Marco Klein

14
Lưu ý: UTF-8 Không có Chữ ký ở gần cuối danh sách.
Keavon

29

Bây giờ với hình ảnh.

  1. Chuyển đến File-> Save As.

    Tập tin / Lưu dưới dạng

  2. Sau đó vào nút Save bấm vào tam giác và nhấp Save with Encoding....

    Lưu với mã hóa

  3. Nhấp vào ok để ghi đè lên tệp sau đó từ danh sách mã hóa tìm UTF-8 Without signature-> Nhấp OK.

    UTF-8 Không có chữ ký

Hy vọng điều này sẽ giúp bạn tiết kiệm thời gian.


26

Tôi đã tạo tiện ích mở rộng Mã hóa tệp sửa chữa ngăn Visual Studio 2010+ thêm tệp BOM vào tệp UTF-8.


1
Cảm ơn plugin đó! Cần có một số cách khác để chỉ định loại tệp hơn là sử dụng biểu thức chính quy trong cài đặt khớp với hậu tố tệp. Ngoài ra, plugin chỉ hoạt động trên các tệp khi tôi lưu chúng, khi tôi tạo javascript, ban đầu nó có BOM (thêm 3 byte).
Anders Lindén

6

Thật không may, điều này không hoạt động với các tập tin csproj. Không có "Tùy chọn lưu nâng cao" và mặc dù bạn đã đặt thành "UTF-8 không có chữ ký" cho tệp cs, các tệp csproj vẫn được lưu bằng BOM. Nếu bạn sử dụng VSS, nó vẫn phàn nàn về các tệp dự án.


Có lẽ bạn nên chuyển từ VSS sang SVN. Tôi nhớ đã nhìn thấy một công cụ có thể thực hiện chuyển đổi cho bạn. SVN là miễn phí và với một mức giá nhỏ, bạn có thể bổ sung SVN trực quan vào studio hình ảnh của mình và sử dụng SVN trực tiếp từ UI.
Dave81

7
"Có lẽ bạn nên chuyển từ VSS sang SVN.". Đó là loại gợi ý gì? Hầu hết chúng ta làm việc trên phần mềm doanh nghiệp không được chọn và chọn Hệ thống kiểm soát nguồn của chúng tôi. SVN sở hữu các vấn đề là nguyên nhân thúc đẩy việc tạo ra git, vì họ đã chán ngấy với SVN.
Shiva

4

UTF-8 - Mặc định "Lưu dưới dạng" (Không có chữ ký) - Yêu cầu bao gồm mặc định cho UTF không có chữ ký

VS 2017 vốn hỗ trợ EditorConfig, vì vậy một giải pháp được đề xuất là thêm .editorconfigtệp vào cơ sở mã của bạn và đặt charset => utf-8. Sau đó, khi bạn lưu một tệp, nó sẽ được lưu dưới dạng UTF-8 mà không cần BOM.


Tôi sợ VS 2017 vẫn không hỗ trợ charsettrong .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/
trộm

2

Đối với vs2010 c ++, sẽ có vấn đề với UTF8 mà không có BOM, khi các tệp nguồn chứa các ký tự nhiều byte (ví dụ: tiếng Trung Quốc).

Những ký tự đó sẽ không được nhận dạng chính xác nếu không có BOM và dẫn đến kết quả không thành công.


bởi vì trên Windows không có BOM, tệp sẽ được coi là có mã hóa ANSI, do đó, nó sẽ bị hỏng
phuclv

2

Gần đây tôi đã tìm thấy công cụ dòng lệnh nhỏ này có thêm hoặc xóa BOM trên các tệp được mã hóa UTF-8 tùy ý: UTF BOM Utils ( liên kết mới tại github)

Hạn chế nhỏ, bạn chỉ có thể tải xuống mã nguồn C ++ đơn giản. Bạn phải tạo tệp tạo tệp ( ví dụ với CMake ) và tự biên dịch nó, các tệp nhị phân không được cung cấp trên trang này. Tuy nhiên, đối với một nhà phát triển phần mềm thì điều này không có vấn đề gì.


1

Ngay cả với giải pháp của Dave81, Cộng đồng Visual Studio 2015 vẫn hoàn nguyên tệp của tôi thành UTF8-BOM mỗi khi tôi lưu tệp html đó.

Khi tôi tạo tệp html đó, tôi nhấp chuột phải vào dự án và chọn "Thêm" sau đó thêm tệp HTML.

Theo mặc định, Visual studio sẽ bao gồm một <meta charset="utf-8" />thẻ trong tệp HTML của bạn.

Chỉ cần xóa thẻ sau đó áp dụng giải pháp của Dave81 đã khiến vấn đề biến mất trong thời gian thực.

Có vẻ như Visual Studio phân tích tệp html của bạn và khi thấy thẻ đó, nó chuyển đổi tệp thành UTF8-BOM mà không cần xem xét đến định dạng tệp gốc (UTF-8 không có BOM).

Tôi đã có thể nhận xét ngay dưới giải pháp của Dave81, nhưng tôi không có đủ điểm để làm như vậy ...


0

Đối với Visual Studio Code, hãy làm như sau:

  1. Từ dưới cùng bên phải, chọn mã hóa hiện tại nhập mô tả hình ảnh ở đây
  2. Từ các tùy chọn, chọn Lưu với mã hóa nhập mô tả hình ảnh ở đây
  3. Từ các tùy chọn, chọn UTF-8 nhập mô tả hình ảnh ở đây

Mã VS và mã VS rất khác nhau. Câu hỏi này là về VS
phuclv

mặc dù câu hỏi dành cho VS và bạn đã trả lời cho VScode đã giải quyết vấn đề của tôi do đó nâng cao nó
Ashu

-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

Mã này sẽ tạo tệp trong UTF-8 mà không cần BOM


câu hỏi là về mã hóa trong khi lưu tệp mã nguồn trong IDE, không phải về cài đặt mã hóa trong khi viết một số tệp bằng mã C #
phuclv
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.