2011-10-06 29 views
6

Sử dụng Visual Studio 2010. Tôi có tệp resource.h mà TortoiseHg nghĩ là nhị phân để nó không hiển thị khác biệt cho nó trong cửa sổ cam kết. Tôi có thể dễ dàng mở tệp trong trình chỉnh sửa văn bản và thấy rằng đó là văn bản thuần túy.Tại sao TortoiseHg nghĩ Resource.h là nhị phân?

Tôi đã thấy một câu hỏi liên quan (Why does Mercurial think my SQL files are binary?) cho thấy nó có liên quan đến việc mã hóa tệp. Thật vậy, mở tệp trong Notepad ++ cho biết tệp nằm trong "UCS-2 Little Endian". Làm thế nào tôi có thể sửa lỗi này? Tôi, rõ ràng, không muốn phá vỡ một số kỳ vọng Visual Studio.

Trả lời

7

Chỉ dành cho mục đích hiển thị, Mercurial xử lý tất cả các tệp có chứa NUL bytes dưới dạng nhị phân do quy ước UNIX có từ lâu. Đây chỉ là về luôn luôn đúng .. ngoại trừ UTF-16 (trước đây gọi là UCS-2) .. nơi một nửa tập tin của bạn là NUL byte!

Nội bộ, Mercurial xử lý tất cả tệp dưới dạng nhị phân mọi lúc, vì vậy vấn đề này chỉ liên quan đến những thứ như chúng tôi có cố hiển thị các khác biệt hay không.

Vì vậy, bạn có hai lựa chọn:

  • bỏ qua nó, Mercurial sẽ chỉ làm việc tốt
  • sử dụng một mã hóa khác hơn là UTF-16

Một số trang web tìm kiếm "utf resource.h -16 "gợi ý rằng VS2010 sẽ ổn nếu bạn lưu tệp này bằng UTF-8 hoặc ASCII, đây sẽ là lựa chọn hoàn hảo cho mã nguồn C.

http://social.msdn.microsoft.com/Forums/en/vssetup/thread/aff0f96d-16e3-4801-a7a2-5032803c8d83

+1

Như được mô tả trong chủ đề đó, từ trong Visual Studio tôi đã mở tệp resource.h và đi tới trình đơn Tệp-> Tùy chọn lưu nâng cao và chọn mã hóa "Unicode (UTF-8 có chữ ký) - Codepage 65001". Sau hai lần commit, bây giờ tôi có thể thấy một sự khác biệt thích hợp. – User

+1

Chỉnh sửa, khi chọn "Unicode (UTF-8 có chữ ký) - Codepage 65001" sau khi chỉnh sửa trong trình chỉnh sửa tài nguyên Visual Studio than phiền về tệp không phải là tệp Visual Studio. Thay vào đó, tôi đã sử dụng "US-ASCII" (như được mô tả trong chuỗi được liên kết trong câu trả lời này). Có lẽ vấn đề là chữ ký UTF-8? Có một lựa chọn không có chữ ký, nhưng bây giờ tôi đang xem xét vấn đề được giải quyết. – User

+1

Luôn thích tùy chọn không có chữ ký. BOM (chữ ký được đề cập) là một vấn đề phổ biến trong nhiều chương trình. Và thậm chí không có BOM, việc phát hiện sự khác biệt giữa UTF-8 và ISO-8859-1 là tương đối đơn giản khi nó chứa một ký tự nằm ngoài phạm vi ASCII, nó cũng không thực sự thêm giá trị. –

5

Thử chuyển đổi một cách rõ ràng/thay đổi mã hóa sang UTF-8/ASCII và xem. Bạn có thể làm điều đó từ trình đơn Encoding của Notepad ++ (chọn Mã hóa bằng UTF-8)

Visual Studio sẽ làm việc với tệp UTF-8 tốt.

+1

Điều này không đúng đối với tệp .rc, được thử nghiệm trong Visual Studio 2008 và 2013. Tôi nhận được rất nhiều lỗi như "lỗi RC2135: tệp không tìm thấy: 0x07" khi biên dịch. Resource.h có thể là UTF-8, mặc dù. –

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