Công cụ dành cho nhà phát triển · So sánh văn bản
Sự khác biệt vô hình: Dấu cách không bị phá vỡ, Dấu ngoặc kép thông minh và Biểu mẫu Unicode
· Cách thức hoạt động
text-diff unicode gỡ lỗi
Giải thích lý do tại sao các dòng trông giống nhau trên màn hình có thể khác nhau theo byte, từ dấu cách không ngắt và dấu ngoặc nhọn đến ký tự có độ rộng bằng 0 và dấu trọng âm được phân tách cũng như cách tìm chúng.
Hai dòng trông giống nhau nhưng được gắn cờ là đã thay đổi - mở bằng tệp dịch không được xem xét mà không có lý do rõ ràng
Một dòng dịch có thể hiển thị chính xác giống như hàng xóm của nó nhưng vẫn không so sánh được. Phông chữ trình duyệt ẩn ranh giới điểm mã, kết hợp các dấu và gán các hình dạng tương tự cho các dấu câu khác nhau. ToolAcre so sánh các chuỗi JavaScript chỉ sau các phép biến đổi kiểu chữ hoặc khoảng trắng đã chọn, do đó, một hàng được gắn cờ có thể thể hiện sự khác biệt thực sự về mặt văn bản.
Hãy tin vào vị trí chứ không phải giả định về nhân vật. Sao chép dòng nghi ngờ vào trình soạn thảo hiển thị các điểm mã hoặc trình kiểm tra thập lục phân. Sự khác biệt cho bạn biết dòng nào khác nhau; nó không chú thích vị trí bên trong hoặc đặt tên cho giá trị Unicode chịu trách nhiệm.
Các khoảng trắng không bị ngắt và các ký tự liên quan của chúng - giải thích U+00A0 và các ký tự khoảng trắng khác mà trình xử lý văn bản chèn vào và tại sao một khoảng trắng đơn giản không khớp với chúng
Khoảng trắng không ngắt U+00A0 không có cùng ký tự với khoảng trắng thông thường U+0020. Ở chế độ thông thường, các phím dòng của chúng vẫn khác biệt. Trong Bỏ qua khoảng trắng, việc thay thế chạy khoảng trắng có thể giảm các lần chạy đó xuống khoảng trắng bình thường sau khi cắt xén, làm cho một số khác biệt như vậy biến mất.
Tùy chọn đó là một phép chuyển đổi phù hợp, không phải là lệnh dọn dẹp Unicode. Các hàng bằng nhau được hiển thị sẽ giữ lại văn bản gốc bên trái và không tạo ra tài liệu đã sửa nào. Nếu hệ thống xuất bản yêu cầu khoảng cách không ngắt quãng thì kết quả khớp chuẩn hóa có thể ẩn hướng dẫn bố cục có chủ ý thay vì sửa nó.
Chế độ khoảng trắng có thể thu gọn khoảng trắng Unicode; so sánh thông thường bảo tồn các ký tự riêng biệt
Dấu nháy đơn và dấu ngoặc kép thẳng khác với các dạng mở và đóng kiểu chữ. Bỏ qua trường hợp không thay đổi dấu câu và xử lý khoảng trắng không viết lại dấu ngoặc kép. Do đó, tính năng tự động sửa lỗi của trình xử lý văn bản có thể tạo ra sự thay thế toàn dòng ngay cả khi câu đó được đọc giống hệt nhau trong nháy mắt.
Chọn dấu câu dự định dựa trên đích đến. Mã nguồn, khóa tìm kiếm và định dạng dữ liệu có thể yêu cầu chính xác ASCII ký tự, trong khi bản biên tập có thể thích dạng typographic hơn. Sự so sánh chứng tỏ sự khác biệt, nhưng nó không có chính sách để quyết định bên nào đúng.
Các ký tự có chiều rộng bằng 0 và hướng - bao gồm các khoảng trắng có độ rộng bằng 0, các dấu nối và dấu hai chiều hiển thị như chưa có gì thay đổi dòng
Các khoảng trắng có độ rộng bằng 0, các điểm nối và dấu định hướng có thể chiếm các vị trí chuỗi mà không vẽ được hình tượng rõ ràng. ToolAcre hiển thị dữ liệu đầu vào bằng nội dung văn bản, tránh việc diễn giải HTML nhưng việc hiển thị an toàn đó không hiển thị các điểm mã ẩn. Họ vẫn tham gia vào dòng bình đẳng thông thường.
Hành vi định hướng cũng có thể làm cho thứ tự trực quan trở thành một hướng dẫn không đáng tin cậy về thứ tự lưu trữ. Không sao chép đoạn có hướng hỗn hợp đáng ngờ vào lệnh shell hoặc mã định danh chỉ vì nó trông quen thuộc. Kiểm tra các điểm mã và bối cảnh xung quanh trong một công cụ được xây dựng có mục đích trước khi thay thế bất kỳ thứ gì.
Các dấu được soạn và phân tách — giải thích việc chuẩn hóa NFC so với NFD bằng một chữ cái có dấu dưới dạng một điểm mã so với một chữ cái cơ sở cộng với dấu kết hợp
Một ký tự có dấu có thể được biểu diễn dưới dạng một điểm mã được soạn sẵn hoặc dưới dạng một chữ cái cơ bản theo sau là dấu kết hợp. Kho lưu trữ không chứa lệnh gọi tới `normalize`, do đó, các biểu mẫu trông tương đương về mặt chuẩn mực vẫn duy trì các chuỗi JavaScript khác nhau và có thể tạo ra các hàng xóa-cộng-thêm.
Bộ thử nghiệm chứng minh các chuỗi Unicode giống hệt nhau và `café` khác với `cafe`; nó không hứa hẹn so sánh nhận biết đồ thị. Do đó, bài viết này tránh các khiếu nại về so sánh byte hoặc tương đương Unicode đầy đủ. Thuật toán dòng nhận các chuỗi và so sánh các khóa được chuyển đổi của chúng với sự bình đẳng nghiêm ngặt.
Các dấu được soạn và phân tách vẫn khác nhau vì công cụ này không thực hiện chuẩn hóa Unicode
Giả sử một dòng tài nguyên xuất hiện không thay đổi nhưng được gắn cờ. Trước tiên hãy so sánh với tất cả các tùy chọn bị tắt, sau đó chỉ chuyển đổi khoảng trắng. Nếu hàng bằng nhau, hãy kiểm tra khoảng trắng và khoảng trắng ẩn. Nếu nó vẫn thay đổi, hãy kiểm tra dấu ngoặc kép, dấu kết hợp và các điểm mã khác thay vì gõ lại dòng nhiều lần.
Người kiểm tra nhân vật có thể tiết lộ U+00A0 nơi dự kiến sẽ có một không gian bình thường. Chỉ thay thế nó sau khi xác nhận yêu cầu của định dạng. Trong nội dung được dịch, các khoảng trắng không bị ngắt có thể là các quy ước về dấu câu có chủ ý và việc tìm kiếm và thay thế rộng rãi có thể làm hỏng kiểu chữ chính xác ở những nơi khác.
Điều này không bao gồm những gì - báo cáo so sánh cho thấy các dòng khác nhau; nó không thực hiện chuẩn hóa Unicode cho bạn hoặc thay thế các ký tự
Khác biệt văn bản không chuẩn hóa NFC hoặc NFD, xác định các nội dung gây nhầm lẫn, xóa dấu có độ rộng bằng 0 hoặc tạo ra đầu ra đã được sửa chữa. Nó cũng không so sánh các byte được mã hóa. Đó là những hoạt động riêng biệt với những hậu quả mà bộ so sánh dòng chung không nên âm thầm lựa chọn.
Bỏ qua trường hợp sử dụng JavaScript `toLowerCase`, trong khi Bỏ qua khoảng trắng sẽ cắt bớt và thu gọn các khóa phù hợp. Cả hai hoạt động đều không cung cấp đối chiếu nhận biết miền địa phương hoặc đánh giá bảo mật Unicode. Sử dụng kết quả đầu ra để thu hẹp cuộc điều tra chứ không phải để chứng nhận số nhận dạng là an toàn hoặc tương đương về mặt ngôn ngữ.
Bài học rút ra: tin vào sự khác biệt trong mắt bạn — kết luận rằng dòng được gắn cờ là sự khác biệt thực sự và cho biết cách so sánh văn bản của ToolAcre xác định chính xác những dòng cần kiểm tra
Khi tầm nhìn và sự khác biệt không đồng nhất, hãy cho rằng chuỗi xứng đáng được kiểm tra. Thuật toán không có mô hình trực quan để bị đánh lừa bởi việc định hình phông chữ; nó nhìn thấy các phím dòng. Hạn chế đó rất hữu ích vì nó ngăn chặn những khác biệt ẩn giấu khỏi bị bỏ qua chỉ vì trình duyệt thu hút chúng giống nhau.
Trước tiên hãy chạy so sánh thông thường, ghi lại tùy chọn nào thay đổi kết quả và kiểm tra các điểm mã trước khi chỉnh sửa. Dấu vết bằng chứng này tách biệt việc chuẩn hóa khoảng trắng khỏi dấu câu hoặc bố cục và tránh thói quen phá hoại là thay thế mọi ký tự bất thường bằng xấp xỉ ASCII.