Trong nhóm của chúng tôi, chúng tôi có dự án cơ sở dữ liệu trong Visual Studio 2008 dưới sự kiểm soát nguồn của Team Foundation Server. Cứ hai tuần một lần, sau khi một đồng nghiệp kiểm tra, tệp dự án sẽ không tải trên các máy phát triển khác. Thông báo lỗi là:Tệp dự án Visual Studio 2008 không tải do thay đổi mã hóa không mong muốn
Không thể tải tệp dự án. Dữ liệu ở cấp cơ sở không hợp lệ. Line 1, vị trí 1.
Khi tôi nhìn vào hồ sơ dự án trong Notepad ++, các tập tin trông như thế này:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL
...
và vân vân (bạn có thể nhìn thấy <?xml version
trong này) trong khi một tập tin dự án bình thường trông giống như:
<?xml version="1.0" encoding="utf-16"?>
...
Vì vậy, có lẽ cái gì là sai với enc mã hóa tệp. Đây là một vấn đề đối với chúng tôi bởi vì hóa ra là không thể lấy lại mã hóa tệp đúng. Các 'giải pháp' là để vứt bỏ các tập tin dự án có được phiên bản làm việc biết cuối cùng từ kiểm soát nguồn.
Theo tệp, mã hóa phải là UTF-16. Theo Notepad ++, tệp bị hỏng thực sự là UTF-8.
Câu hỏi của tôi là:
- Tại sao Visual Studio rối tung lên bảng mã của hồ sơ dự án , rõ ràng tại thời điểm ngẫu nhiên và tại máy ngẫu nhiên?
- Chúng ta nên làm gì để ngăn chặn điều này?
- Khi điều đó xảy ra, có khả năng khôi phục tệp hiện tại vào đúng mã hóa thay vì của việc kéo phiên bản cũ hơn từ kiểm soát nguồn không?
Lưu ý cuối cùng: vấn đề là với một tệp dự án duy nhất, tất cả các tệp dự án khác không hiển thị vấn đề này.
CẬP NHẬT: Nhờ đề xuất của Jon Skeet tôi có câu trả lời cho câu hỏi số ba. Khi tôi thay thế chín byte đầu tiên EF BB BF EF BF BD EF BF BD bằng hai byte FF FE, tệp dự án sẽ tải lại.
Điều này vẫn là câu hỏi tại sao Visual Studio làm hỏng tệp.
Bạn thấy gì nếu bạn thực hiện sự khác biệt nhị phân giữa tệp bị hỏng và tệp đang hoạt động? Tôi tự hỏi liệu đó có phải là vấn đề về tính cuối cùng của UTF-16 hay không. –
Nếu tôi làm một nhị phân khác thì nó chỉ ra các tập tin được thụt lề, ngoại trừ chính xác có hai byte phụ ở đầu, FF FE, và tham nhũng có thêm 9 byte EF BB BF EF BF BD EF BF BD. – Xenan