รูปแบบ ANSI คืออะไร


คำตอบ:


246

การเข้ารหัส ANSI เป็นคำทั่วไปที่ใช้เพื่ออ้างถึงหน้ารหัสมาตรฐานในระบบซึ่งโดยปกติคือ Windows มันถูกเรียกว่าWindows-1252บนระบบ Western / US (มันสามารถเป็นตัวแทนของหน้ารหัส Windowsอื่น ๆ บางอย่างในระบบอื่น ๆ ) นี่เป็นส่วนขยายของชุดอักขระ ASCIIที่มันรวมถึงตัวอักษร ASCII ทั้งหมดที่มี 128 ตัวอักษรรหัสเพิ่มเติม ความแตกต่างนี้เกิดจากความจริงที่ว่าการเข้ารหัส "ANSI" นั้นเป็น 8 บิตแทนที่จะเป็น 7 บิตเนื่องจาก ASCII นั้นเป็น (ASCII จะถูกเข้ารหัสเกือบทุกครั้งในปัจจุบันเป็น 8 บิตด้วยการตั้งค่าMSBเป็น 0) ดูบทความสำหรับคำอธิบายว่าทำไมการเข้ารหัสนี้มักเรียกว่า ANSI

ชื่อ "ANSI" เป็นชื่อเรียกที่ไม่ถูกต้องเนื่องจากไม่ตรงกับมาตรฐาน ANSI จริงใด ๆ แต่ชื่อนั้นติดอยู่ ANSI ไม่เหมือนกับ UTF-8


42
ANSI ไม่ได้เป็นเพียงชื่อผิดเพียงเล็กน้อย แต่เป็นชื่อที่ผิดอย่างสมบูรณ์ ชื่อนี้มีความหมายชัดเจนว่าอะไรก็ตามที่อ้างถึงคือมาตรฐาน ANSI ซึ่งไม่ใช่ นั่นเป็นเรื่องของความเป็นจริงขาวดำ ด้วยที่กล่าวว่ามันใช้กันอย่างแพร่หลายว่าเราติดอยู่กับมัน
Nate CK

1
ฉันรู้ว่า ANSI ว่าเป็นรหัสหน้า 437 ไม่ใช่รหัส Windows หน้า 1252 ย้อนกลับไปเมื่อ ANSI อ้างถึงกราฟิกที่สร้างขึ้นสำหรับระบบกระดานข่าวฉันสามารถรับประกันได้ว่าในกรณีนี้
lordscarlet

@lordscarlet: ANSI ยังไม่ได้สร้างมาตรฐาน แต่ Windows-1252 นั้นใกล้เคียงที่สุดที่คุณจะได้รับ (อย่างน้อยก็ใน Windows) เนื่องจากเป็น superset ดูen.wikipedia.org/wiki/ANSI_codepage#ANSIสำหรับการอ้างอิง
Noldorin

4
"ANSI" ไม่ได้อ้างถึงมาตรฐาน ANSI ใด ๆ อย่างชัดเจนอย่างไรก็ตามเป็นเรื่องจริงที่คุณสามารถเลือก "การเข้ารหัส: ANSI" ตัวอย่างเช่นใน Notepad เมื่อคุณบันทึกไฟล์ และคำถามที่แท้จริงคือ: "หมายความว่าอะไร" คำตอบนี้เป็นคำตอบที่ดีที่สุด
Wernfried Domscheit

1
ในกรณีของฉัน ANSI windows-1254หมายถึง
Ramazan Polat

59

ในทางเทคนิค ANSI ควรเหมือนกับ US-ASCII มันหมายถึงมาตรฐาน ANSI X3.4 ซึ่งเป็นเพียงANSIองค์กรรุ่นที่ยอมรับของ ASCII การใช้อักขระชุดบนสุดไม่ได้กำหนดไว้ใน ASCII / ANSI เนื่องจากเป็นชุดอักขระ 7 บิต

อย่างไรก็ตามการใช้คำผิดทาง DOS เป็นระยะเวลาหลายปีและต่อมาชุมชน Windows ได้ทิ้งความหมายในทางปฏิบัติไว้เป็น“ ระบบรหัสเพจของเครื่องที่ใช้ เพจรหัสของระบบนั้นบางครั้งเรียกว่า 'mbcs' เนื่องจากในระบบเอเชียตะวันออกที่สามารถเข้ารหัสแบบหลายไบต์ต่ออักขระ หน้าโค้ดบางหน้าสามารถใช้ไบต์บนสุดเป็นบิตต่อท้ายในลำดับหลายไบต์ดังนั้นมันจึงไม่เข้มงวดกับ ASCII ธรรมดา แต่ถึงอย่างนั้นก็ยังเรียกว่า "ANSI"

สำหรับการตั้งค่าเริ่มต้นในสหรัฐอเมริกาและยุโรปตะวันตก“ ANSI” จะแมปกับรหัส Windows หน้า 1252 ซึ่งไม่เหมือนกับ ISO-8859-1 (แม้ว่าจะคล้ายกันมาก) ในเครื่องอื่นมันอาจเป็นอย่างอื่นก็ได้ สิ่งนี้ทำให้“ ANSI” ไร้ประโยชน์อย่างเต็มที่ในฐานะตัวระบุการเข้ารหัสภายนอก


32

พูดอย่างเคร่งครัดไม่มีสิ่งเช่นการเข้ารหัส ANSI คำศัพท์ที่ใช้ในการเข้ารหัสที่แตกต่างกันหลาย ANSI:

  1. ISO 8859-1
  2. Windows CP1252
  3. การเข้ารหัสระบบปัจจุบันบนเครื่อง Windows (ในคำศัพท์ Win32 API)

ว่าเป็นสิ่งที่ผิด. เพจรหัส Windows 1252 สร้างขึ้นตามมาตรฐาน ISO 8859-1 แต่ไม่เท่ากันทั้งหมด คำว่า ANSI อ้างอิงถึงมาตรฐาน ISO 8859-x
Patrik

17

กาลครั้งหนึ่ง Microsoft เหมือนคนอื่น ๆ ใช้ชุดอักขระ 7 บิตและพวกเขาคิดค้นของตัวเองเมื่อมันเหมาะกับพวกเขาแม้ว่าพวกเขาจะเก็บ ASCII เป็นเซตย่อยหลัก จากนั้นพวกเขาก็ตระหนักว่าโลกได้เปลี่ยนไปใช้การเข้ารหัส 8 บิตและมีมาตรฐานสากลอยู่เช่นตระกูล ISO-8859 ในสมัยนั้นถ้าคุณต้องการได้รับมาตรฐานสากลและคุณอาศัยอยู่ในสหรัฐอเมริกาคุณซื้อจากสถาบันมาตรฐานแห่งชาติอเมริกัน ANSI ซึ่งตีพิมพ์มาตรฐานระหว่างประเทศอีกครั้งด้วยแบรนด์และหมายเลขของตัวเอง (นั่นเป็นเพราะรัฐบาลสหรัฐฯต้องการ สอดคล้องกับมาตรฐานอเมริกันไม่ใช่มาตรฐานสากล) ดังนั้นสำเนา ISO-8859 ของ Microsoft จึงกล่าวว่า "ANSI" บนหน้าปก และเนื่องจากไมโครซอฟท์ไม่ได้คุ้นเคยกับมาตรฐานในสมัยนั้นมากนักพวกเขาจึงไม่ได้ ไม่ทราบว่า ANSI ตีพิมพ์มาตรฐานอื่น ๆ มากมายเช่นกัน ดังนั้นพวกเขาจึงอ้างถึงมาตรฐานในตระกูล ISO-8859 (และตัวแปรที่พวกเขาคิดค้นเพราะพวกเขาไม่เข้าใจมาตรฐานจริง ๆ ในสมัยนั้น) โดยใช้ชื่อบนหน้าปก "ANSI" และพบวิธีใน Microsoft เอกสารผู้ใช้และจากนี้จึงเป็นชุมชนผู้ใช้ นั่นคือประมาณ 30 ปีที่แล้ว แต่บางครั้งคุณยังคงได้ยินชื่อวันนี้


มาตรฐานเป็นสิ่งอุตสาหกรรมดังนั้นโปรแกรมเมอร์จึงเป็นมาตรฐานใหม่เนื่องจากเป็นอุตสาหกรรมใหม่
CoffeDeveloper

1
มันไม่ใช่อุตสาหกรรมใหม่ตามเวลาที่ Microsoft ก่อตั้งขึ้น
Michael Kay

Microsoft มีทัศนคติที่เป็นปัญหาและแย้งต่อการทำงานร่วมกันโดยทั่วไป เมื่อพวกเขาตัดสินใจในปลายปี 1990 ที่จะ "ยอมรับและขยายมาตรฐาน" แทนที่จะหลีกเลี่ยงพวกเขาโดยตรงนั่นคือการเปลี่ยนแปลงที่น่าทึ่ง (คุณอาจยืนยันว่าความคืบหน้าเป็นไปไม่ได้ถ้าคุณเพียง แต่ยึดมั่นกับมาตรฐานที่มีอยู่แล้ว แต่นั่นไม่ใช่เหตุผลหลักที่พวกเขาทำเช่นนี้)
tripleee

14

ASCIIเพียงกำหนดหน้ารหัส 7 บิตที่มีสัญลักษณ์ 128 ตัว ANSI ขยายไปถึง 8 บิตและมีหน้ารหัสที่แตกต่างกันหลายอย่างสำหรับสัญลักษณ์ 128 ถึง 255

ANSI การตั้งชื่อไม่ถูกต้องเพราะจริง ๆ แล้วเป็นบรรทัดฐาน ISO / IEC 8859 ที่กำหนดหน้ารหัสนี้ ดูที่ISO / IEC 8859สำหรับการอ้างอิง มีโค้ดเพจ 16 ค่า ISO / IEC 8859-1 เป็น ISO / IEC 8859-16

Windows-1252ขึ้นอยู่กับ ISO / IEC 8859-1 อีกครั้งโดยมีการปรับเปลี่ยนส่วนใหญ่อยู่ในช่วงของชุดควบคุม C1ในช่วง 128 ถึง 159 วิกิพีเดียระบุว่า Windows-1252 นั้นอ้างถึง ISO-8859-1 ด้วยเช่นกัน เครื่องหมายขีดคั่นระหว่าง ISO และ 8859 (ไม่น่าเชื่อ! ใครทำแบบนั้น?!?)


5

โดยพื้นฐาน "ANSI" หมายถึงเพจรหัสดั้งเดิมบน Windows ดูบทความโดย Raymond Chenในหัวข้อนี้:

แหล่งที่มาของสิ่งนี้มาจากความจริงที่ว่าหน้ารหัสของ Windows 1252 นั้นมาจากแบบร่าง ANSI ซึ่งกลายเป็นมาตรฐาน ISO 8859-1

อักขระ 127 ตัวแรกนั้นเหมือนกับ ASCII ในหน้ารหัสส่วนใหญ่ แต่อักขระส่วนบนจะแตกต่างกันไป

อย่างไรก็ตาม ANSI ไม่ได้หมายถึง CP1252 หรือละติน 1 โดยอัตโนมัติ

ความสับสนทั้งหมดแม้ว่าคุณควรหลีกเลี่ยงปัญหาดังกล่าวในปัจจุบันและใช้ Unicode


4

ในกรณีที่พีซีของคุณไม่ใช่พีซี "ตะวันตก" และคุณไม่ทราบว่าจะใช้หน้ารหัสใดคุณสามารถดูที่หน้านี้: การอ้างอิงภาษาแห่งชาติ (NLS) API อ้างอิง

[Microsoft ลบการอ้างอิงนี้ให้ใช้แบบฟอร์มการอ้างอิง API แห่งชาติสนับสนุนภาษาเว็บเก็บถาวร(NLS) เว็บ

หรือคุณสามารถค้นหารีจิสตรีของคุณ:

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

เมื่อใช้อักขระไบต์เดียวรูปแบบ ASCII จะกำหนดอักขระ 127 ตัวแรก อักขระส่วนขยายจาก 128-255 ถูกกำหนดโดยหน้ารหัส ANSI ต่าง ๆ เพื่อให้การสนับสนุนที่ จำกัด สำหรับภาษาอื่น ๆ เพื่อให้เข้าใจถึงสตริงที่เข้ารหัส ANSI คุณต้องทราบว่าจะใช้หน้ารหัสใด


1

ฉันจำได้เมื่อข้อความ "ANSI" ที่อ้างถึงหลอกรหัส VT-100 ใช้งานได้ใน DOS ผ่านไดรเวอร์ ANSI.SYS เพื่อเปลี่ยนการไหลเวียนของข้อความสตรีมมิ่ง .... อาจไม่ใช่สิ่งที่คุณอ้างถึง แต่ถ้ามันเห็นhttp: //en.wikipedia.org/wiki/ANSI_escape_code


-4

ANSI (aka ของ Windows 1252 / WinLatin1) คือการเข้ารหัสอักขระของตัวอักษรละตินค่อนข้างคล้ายกับISO-8859-1 คุณอาจต้องการที่จะใช้รูปลักษณ์ของมันที่วิกิพีเดีย


6
ไม่ใช่ CP1252 สำหรับทุกคน ที่ขึ้นอยู่กับภูมิภาคเป็นอย่างมาก
Joey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.