Định dạng ANSI là gì?


Câu trả lời:


245

Mã hóa ANSI là một thuật ngữ hơi chung chung được sử dụng để chỉ trang mã tiêu chuẩn trên hệ thống, thường là Windows. Nó được gọi đúng hơn là Windows-1252 trên các hệ thống phương Tây / Hoa Kỳ. (Nó có thể đại diện cho một số trang mã Windows khác trên các hệ thống khác.) Đây thực chất là một phần mở rộng của bộ ký tự ASCII trong đó bao gồm tất cả các ký tự ASCII có thêm 128 ký tự. Sự khác biệt này là do thực tế là mã hóa "ANSI" là 8 bit chứ không phải 7 bit như ASCII (ASCII hầu như luôn được mã hóa hiện nay dưới dạng byte 8 bit với MSB được đặt thành 0). Xem bài viết để được giải thích tại sao mã hóa này thường được gọi là ANSI.

Tên "ANSI" là một cách gọi sai, vì nó không tương ứng với bất kỳ tiêu chuẩn ANSI thực tế nào, nhưng tên đã bị kẹt. ANSI không giống như UTF-8.


42
ANSI không chỉ là một cách hiểu sai "nhẹ", nó là một tên hoàn toàn sai. Tên này rõ ràng ngụ ý rằng bất cứ điều gì nó đề cập đến là một tiêu chuẩn ANSI, mà nó không phải là; đó là một vấn đề đen trắng của thực tế. Như đã nói, nó được sử dụng rộng rãi đến mức chúng ta bị mắc kẹt với nó.
Nate CK

1
Tôi biết ANSI là Mã trang 437, không phải Mã Windows Trang 1252. Quay lại khi ANSI đề cập đến đồ họa được tạo cho các hệ thống bảng thông báo, tôi có thể đảm bảo khá nhiều đó là trường hợp.
lordscarlet

@lordscarlet: ANSI chưa tiêu chuẩn hóa chúng, nhưng Windows-1252 là thứ gần nhất bạn có được (ít nhất là trên Windows), vì nó là siêu bộ. Xem en.wikipedia.org/wiki/ANSI_codepage#ANSI để tham khảo.
Noldorin

4
"ANSI" rõ ràng không đề cập đến bất kỳ tiêu chuẩn ANSI nào, tuy nhiên, vấn đề thực tế là bạn có thể chọn "Mã hóa: ANSI", ví dụ như trong Notepad khi bạn lưu tệp. Và câu hỏi thực tế là: "Nó có nghĩa là gì"? Câu trả lời này là một trong những tốt nhất.
Wernfried Domscheit 15/03/18

1
Trong trường hợp của tôi, ANSI đã đề cập đến windows-1254.
Ramazan Polat

59

Về mặt kỹ thuật, ANSI phải giống như US-ASCII. Nó đề cập đến tiêu chuẩn ANSI X3.4, đơn giản là phiên bản được phê chuẩn của tổ chức ANSI của ASCII. Việc sử dụng các ký tự tập bit trên cùng không được xác định trong ASCII / ANSI vì đây là bộ ký tự 7 bit.

Tuy nhiên, nhiều năm sử dụng sai thuật ngữ của DOS và sau đó, cộng đồng Windows đã để lại ý nghĩa thực tế của nó như là mã hóa hệ thống của bất cứ máy nào đang được sử dụng. Bảng mã hệ thống đôi khi còn được gọi là 'mbcs', vì trên các hệ thống Đông Á có thể là mã hóa nhiều byte cho mỗi ký tự. Một số trang mã thậm chí có thể sử dụng các byte rõ ràng hàng đầu như các byte theo dõi trong một chuỗi đa bào, do đó, nó thậm chí không tương thích chặt chẽ với ASCII đơn giản ... nhưng ngay cả khi đó, nó vẫn được gọi là BẠC ANSI.

Trên cài đặt mặc định của Hoa Kỳ và Tây Âu, Bản đồ ANSI Cảnh đến mã trang Windows 1252. Điều này không giống với ISO-8859-1 (mặc dù nó khá giống nhau). Trên các máy khác, nó có thể là bất cứ thứ gì khác. Điều này làm cho AN AN nghiêm trọng hoàn toàn vô dụng như một định danh mã hóa bên ngoài.


32

Nói đúng ra, không có thứ gọi là mã hóa ANSI. Thông thường, thuật ngữ ANSI được sử dụng cho một số bảng mã khác nhau:

  1. ISO 8859-1
  2. Windows CP1252
  3. Mã hóa hệ thống hiện tại trên máy Windows (theo thuật ngữ API Win32).

Điều đó là sai. Windows codepage 1252 được tạo dựa trên ISO 8859-1 nhưng không hoàn toàn bằng nhau. Thuật ngữ ANSI tham chiếu đến tiêu chuẩn ISO 8859-x.
Patrik

17

Ngày xưa, Microsoft, giống như mọi người khác, đã sử dụng các bộ ký tự 7 bit và họ đã phát minh ra chính họ khi nó phù hợp với họ, mặc dù họ giữ ASCII như một tập hợp con cốt lõi. Sau đó, họ nhận ra thế giới đã chuyển sang mã hóa 8 bit và có các tiêu chuẩn quốc tế xung quanh, chẳng hạn như gia đình ISO-8859. Vào thời đó, nếu bạn muốn đạt được một tiêu chuẩn quốc tế và bạn sống ở Mỹ, bạn đã mua nó từ Viện Tiêu chuẩn Quốc gia Hoa Kỳ, ANSI, người đã công bố các tiêu chuẩn quốc tế với nhãn hiệu và số riêng của họ (đó là vì chính phủ Hoa Kỳ muốn phù hợp với tiêu chuẩn Mỹ, không phải tiêu chuẩn quốc tế). Vì vậy, bản sao ISO-8859 của Microsoft đã ghi "ANSI" trên trang bìa. Và bởi vì Microsoft không quen với các tiêu chuẩn trong những ngày đó, nên họ đã không ' t nhận ra rằng ANSI cũng đã công bố rất nhiều tiêu chuẩn khác. Vì vậy, họ đã đề cập đến các tiêu chuẩn trong gia đình ISO-8859 (và các biến thể mà họ đã phát minh ra, vì họ không thực sự hiểu các tiêu chuẩn trong những ngày đó) bằng tên trên trang bìa, "ANSI", và nó đã tìm thấy Microsoft tài liệu người dùng và do đó vào cộng đồng người dùng. Đó là khoảng 30 năm trước, nhưng đôi khi bạn vẫn nghe thấy tên ngày hôm nay.


tiêu chuẩn là công cụ công nghiệp để các lập trình viên mới làm quen với các tiêu chuẩn vì nó là một ngành công nghiệp mới?
CoffeDeveloper 3/03/2015

1
Đó không phải là một ngành công nghiệp mới vào thời điểm Microsoft được thành lập.
Michael Kay

Microsoft có một thái độ có vấn đề và gây tranh cãi đối với khả năng tương tác nói chung. Khi họ quyết định vào cuối những năm 1990 để "nắm lấy và mở rộng" các tiêu chuẩn thay vì trực tiếp xa lánh họ, đó là một thay đổi đáng chú ý, mặc dù vẫn không phải là một cách tiếp cận có trách nhiệm đối với khả năng tương tác thích hợp. (Bạn có thể lập luận rằng tiến trình là không thể nếu bạn chỉ tuân thủ các tiêu chuẩn hiện có, nhưng rõ ràng đó không phải là lý do chính khiến họ làm theo cách này.)
tripleee

14

ASCII chỉ định nghĩa một trang mã 7 bit với 128 ký hiệu. ANSI mở rộng điều này lên 8 bit và có một số trang mã khác nhau cho các ký hiệu 128 đến 255.

Việc đặt tên ANSI là không chính xác vì thực tế đây là tiêu chuẩn ISO / IEC 8859 xác định các trang mã này. Xem ISO / IEC 8859 để tham khảo. Có 16 trang mã ISO / IEC 8859-1 đến ISO / IEC 8859-16.

Windows-1252 một lần nữa dựa trên ISO / IEC 8859-1 với một số sửa đổi chủ yếu trong phạm vi của bộ điều khiển C1 trong phạm vi 128 đến 159. Wikipedia nói rằng Windows-1252 cũng được gọi là ISO-8859-1 trong một giây gạch nối giữa ISO và 8859. (Không thể tin được! Ai làm điều gì đó như vậy?!?)


5

Về cơ bản "ANSI" đề cập đến bản mã kế thừa trên Windows. Xem thêm một bài viết của Raymond Chen về chủ đề này:

Nguồn gốc của điều này xuất phát từ thực tế là trang mã Windows 1252 ban đầu được dựa trên một bản nháp ANSI, đã trở thành Tiêu chuẩn ISO 8859-1.

Tuy nhiên, 127 ký tự đầu tiên giống hệt với ASCII trong hầu hết các trang mã, các ký tự phía trên khác nhau.

Tuy nhiên, ANSI không tự động có nghĩa là CP1252 hoặc Latin 1.

Tất cả sự nhầm lẫn mặc dù bạn chỉ cần tránh những vấn đề như vậy hiện nay và sử dụng Unicode.


4

Chỉ trong trường hợp PC của bạn không phải là PC "phương Tây" và bạn không biết trang mã nào được sử dụng, bạn có thể xem trang này: Tham khảo API hỗ trợ ngôn ngữ quốc gia (NLS)

[Microsoft đã xóa tham chiếu này, lấy mẫu tham khảo API hỗ trợ ngôn ngữ quốc gia (NLS) lưu trữ web

Hoặc bạn có thể truy vấn sổ đăng ký của mình:

C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    ACP    REG_SZ    1252

End of search: 1 match(es) found.

C:\>

2

Khi sử dụng các ký tự byte đơn, định dạng ASCII xác định 127 ký tự đầu tiên. Các ký tự mở rộng từ 128-255 được xác định bởi các trang mã ANSI khác nhau để cho phép hỗ trợ hạn chế cho các ngôn ngữ khác. Để hiểu được chuỗi mã hóa ANSI, bạn cần biết nó sử dụng trang mã nào.


1

Tôi nhớ khi văn bản "ANSI" đề cập đến mã thoát VT-100 giả có thể sử dụng trong DOS thông qua trình điều khiển ANSI.SYS để thay đổi luồng văn bản phát trực tuyến .... Có thể không phải là những gì bạn đang đề cập nhưng nếu nó được xem http: //en.wikipedia.org/wiki/ANSI_escape_code


-4

ANSI (còn gọi là Windows-1252 / WinLatin1) là mã hóa ký tự của bảng chữ cái Latinh, khá giống với ISO-8859-1 . Bạn có thể muốn xem nó tại Wikipedia .


6
Đó không phải là CP1252 cho tất cả mọi người; điều đó phụ thuộc rất nhiều vào khu vực
Joey
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.