Dấu ngoặc kép cong và gạch ngang làm hỏng code: cách chuyển về thẳng
Dấu ngoặc kép cong, dấu nháy cong, gạch en, gạch em và khoảng trắng cứng trông giống hệt các ký tự thường, nhưng máy tính coi chúng là những ký tự khác nhau. Code, file CSV, công thức bảng tính và dòng lệnh đều cần ký tự thường. Một chuỗi trích dẫn dán vào sẽ không còn là chuỗi, gạch nối đôi trong tham số sẽ biến thành gạch ngang, còn khoảng trắng cứng có thể khiến chương trình không đọc được dòng. Hãy chuyển các ký tự về dạng thẳng trước khi dán vào code, rồi kiểm tra kết quả ngay tại nơi nó sẽ chạy.
Sửa văn bản dán vàoVăn bản dán bị ngắt dòng lung tungDùng miễn phíCác ký tự này đến từ đâu
Trình soạn thảo văn bản và nhiều chương trình email tự thay dấu ngoặc kép thẳng bằng dấu cong khi bạn gõ. Đây gọi là dấu nháy thông minh. Word còn có thể đổi hai dấu gạch nối thành một gạch ngang. Trang web và một số trình soạn thảo chèn khoảng trắng cứng, U+00A0, để giữ hai từ trên cùng một dòng. Những ký tự này đúng về mặt trình bày, nên chúng mới xuất hiện. Nhưng chúng sai với bất kỳ thứ gì chương trình đọc.
Điều gì hỏng, và ở đâu
| Nơi | Điều gì xảy ra |
|---|---|
| Mã nguồn | Dấu ngoặc kép cong không phải dấu bao chuỗi, và nhiều ngôn ngữ từ chối dấu cong hoặc khoảng trắng cứng nằm ngoài chuỗi |
| Lệnh shell | Gạch en gõ vào không phải ký hiệu tham số, nên chương trình thấy một đối số không xác định |
| File CSV | Bộ phân tích cú pháp bao các trường bằng dấu ngoặc kép thẳng, nên dấu cong không bảo vệ được dấu phẩy nằm trong trường |
| Công thức bảng tính | Dấu ngoặc cong trở thành một phần của văn bản, hoặc công thức báo lỗi |
| JSON | Dấu ngoặc kép cong không phải dấu bao chuỗi hợp lệ, nên bộ phân tích cú pháp bị lỗi |
Về quy tắc đặt dấu ngoặc mà file CSV tuân theo, xem hướng dẫn CSV sang JSON.
Chuyển về thẳng trong fixmint
Ba công cụ bao quát các trường hợp thường gặp, mỗi công cụ xử lý một nhóm ký tự khác nhau.
- Dấu ngoặc cong. Mở Sửa văn bản đã dán và chọn Chuyển dấu ngoặc cong thành thẳng. Công cụ đổi dấu nháy đơn cong và dấu nháy kiểu apostrophe thành dấu nháy đơn thẳng, còn dấu ngoặc kép cong thành dấu ngoặc kép thẳng. Nó không đụng đến gạch ngang. Các tùy chọn khác, như cắt khoảng trắng đầu cuối dòng và gộp khoảng trắng lặp lại, đã được chọn sẵn.
- Gạch ngang, dấu ba chấm và khoảng trắng lạ. Mở Xóa ký tự ẩn và chọn Đồng thời chuyển dấu ngoặc cong, gạch en/em và … sang ASCII thuần. Gạch ngang thành dấu gạch nối, còn dấu ba chấm thành ba dấu chấm. Khoảng trắng cứng mặc định sẽ thành khoảng trắng thường. Chế độ hiển thị đánh dấu cho thấy từng thay đổi nằm ở đâu.
- Một ký tự hoặc một cụm từ. Mở Tìm và thay thế văn bản, để tắt Regex, rồi gõ ký tự cần tìm vào ô Tìm và dạng thường vào ô Thay thế. Khi Regex tắt, ô Tìm được hiểu theo nghĩa đen, nên một dấu ngoặc cong chỉ khớp với chính nó.
Đây là kết quả khi dùng công cụ thứ hai cho một đoạn văn bản dán điển hình:
| Trước | Sau |
|---|---|
| “Hello,” she said. | "Hello," she said. |
| It’s done. | It's done. |
| —verbose | -verbose |
Dòng cuối cùng cho thấy một giới hạn. Mỗi gạch ngang chỉ thành một dấu gạch nối, nên gạch nối đôi mà trình soạn thảo đã gộp thành một gạch em sẽ quay lại thành một dấu gạch nối. Hãy sửa các tham số như --verbose bằng tay sau khi chuyển đổi.
Dán kết quả vào nơi nó sẽ chạy và kiểm tra ngay tại đó. Việc chuyển về thẳng không làm thay đổi ý nghĩa của văn bản, nên một lần chạy thành công mới là phép kiểm tra thực sự.
Kiểm tra kết quả
Chạy lại văn bản đã chuyển qua Xóa ký tự ẩn và đọc chế độ hiển thị đánh dấu. Mọi dấu còn sót lại là ký tự mà lần xử lý đầu chưa bao phủ, chẳng hạn khoảng trắng không rộng, hoặc một khoảng trắng lạ. Chế độ đánh dấu cho thấy từng ký tự nằm ở đâu, nên bạn có thể sửa ngay tại chỗ.
Các ký tự này trông gần như giống hệt nhau trên màn hình, nên kiểm tra bằng mắt sẽ bỏ sót. Dấu ngoặc thẳng và dấu cong chỉ khác nhau chút ít về hình dạng, còn gạch en trong nhiều phông chữ trông giống dấu gạch nối. Hãy kiểm tra bằng cách chạy thử, đừng chỉ dựa vào mắt.
Khi nào không nên chuyển về thẳng
Giữ dấu ngoặc cong và gạch ngang trong văn bản được đọc trên giấy hoặc trên trang web. Đó là cách trình bày đúng ở đó. Chỉ chuyển về thẳng phần nội dung sẽ đưa vào code, CSV, công thức hoặc lệnh. Với văn bản bạn viết trong trình soạn thảo, nếu sau này sẽ dán vào code, hãy tắt tùy chọn dấu nháy thông minh.
Các trường hợp đặc biệt
- Dấu ngoặc lẫn lộn. Một tài liệu có thể trộn dấu ngoặc cong và thẳng. Hãy chạy bước chuyển đổi một lần, rồi tìm trong kết quả xem còn sót dấu nào không, vì các nguồn khác nhau có thể dùng kiểu khác nhau.
- Dấu nháy trong từ. Dấu nháy cong trong các từ viết tắt sẽ thành dấu thẳng, đây là điều hầu hết code mong đợi. Hãy kiểm tra các từ viết tắt xuất hiện bên trong chuỗi.
- Giữ lại bản gốc. Việc chuyển về thẳng chỉ đi một chiều: dấu ngoặc thẳng không cho biết nó từng là dấu cong nào. Hãy giữ tài liệu gốc và thực hiện thay đổi trên bản sao.
- Gạch ngang trong câu. Gạch em dùng để ngắt câu sẽ thành dấu gạch nối, nên "wait — stop" thành "wait - stop". Nếu văn bản để đọc chứ không phải để chạy code, hãy gõ lại bằng tay.
- Ký tự ẩn. Văn bản dán vào cũng có thể chứa khoảng trắng không rộng. Chúng không phải dấu ngoặc, nhưng phá code theo cách tương tự. Hướng dẫn ký tự ẩn có đề cập đến chúng.
Được dịch từ Bản tiếng Anh với sự hỗ trợ của AI.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.


