web-dev-qa-db-ja.com

ANSI形式とは何ですか?

ANSIエンコーディングフォーマットとは何ですか?システムのデフォルトフォーマットですか? ASCIIとはどう違うのですか。

185
web dunia

ANSIエンコーディングは、システム、通常はWindows上の標準コードページを指すために使用される少し一般的な用語です。より正確には、 Windows-1252 Western /米国では=と呼ばれています。システム(他のシステムでは他の特定の Windowsコードページ を表すことができます。)これは基本的に ASCII文字セットの拡張 で、すべての要素が含まれます。追加の128文字コードを持つASCII文字。この違いは、 "ANSI"エンコーディングがASCIIのように7ビットではなく8ビットであるという事実によるものです(ASCIIは、今日ではほとんどの場合、8ビットバイトとして MSB)としてエンコードされます。 0に設定します。このエンコーディングが通常ANSIと呼ばれる理由の説明については、記事を参照してください。

「ANSI」という名前は、実際のANSI規格には対応していないため、誤称ですが、名前は変わりません。 ANSIはUTF-8と同じではありません。

211
Noldorin

技術的には、ANSIはUS-ASCIIと同じであるべきです。これは、ANSI X3.4規格を指します。これは、単純に ANSI 組織が承認したASCIIのバージョンです。最上位ビットセット文字の使用は、7ビット文字セットであるため、ASCII/ANSIでは定義されていません。

ただし、DOS、ひいてはWindowsコミュニティによるこの用語の長年の誤用は、「使用されているすべてのマシンのシステムコードページ」として実用的な意味を残しています。システムコードページは「mbcs」と呼ばれることもあります。東アジアのシステムでは1文字あたり複数バイトのエンコードになる可能性があるためです。一部のコードページでは、マルチバイトシーケンスの末尾バイトとしてトップビットクリアバイトを使用することさえできます。そのため、プレーンASCIIと厳密な互換性はありませんが、それでも「ANSI」と呼ばれます。

米国および西ヨーロッパのデフォルト設定では、「ANSI」はWindowsコードページ1252にマップされます。これはISO-8859-1と同じではありません(非常によく似ています)。他のマシンでは、それはまったく他のものになる可能性があります。これにより、「ANSI」は外部のエンコーディング識別子としてまったく役に立ちません。

52
bobince

厳密に言えば、ANSIエンコーディングのようなものはありません。口語的には、ANSIという用語はいくつかの異なるエンコーディングに使用されます。

  1. ISO 8859-1
  2. ウィンドウズCP1252
  3. Windowsマシンでの現在のシステムエンコード(Win32 APIの用語)。
28

かつてマイクロソフトは、他の人と同じように7ビットの文字セットを使用していましたが、ASCIIをコアサブセットとして使用していましたが、それぞれに適したときに独自に開発しました。それから、彼らは、世界が8ビットエンコーディングに移行したこと、そしてISO-8859ファミリーのような国際標準があることに気づきました。当時、あなたが国際規格を手に入れたいと思っていて、あなたが米国に住んでいたのなら、あなたはそれを独自のブランドと番号で国際規格を再発行したアメリカ規格協会、ANSIから買いました。国際規格ではなく、米国規格への準拠それでマイクロソフトのISO-8859のコピーは表紙に「ANSI」と言った。そして当時マイクロソフトは標準にあまり慣れていなかったので、ANSIが他の多くの標準も公開していることに気づきませんでした。それで彼らはISO-8859ファミリーの規格(そして当時規格を実際には理解していなかったので彼らが発明した変種)を表紙の "ANSI"という名前で参照し、そしてそれがマイクロソフトに入り込んだユーザードキュメンテーション、そしてユーザーコミュニティへ。それは約30年前のことですが、今日もその名前を聞くことがあります。

14
Michael Kay

ASCII は128シンボルの7ビットコードページを定義するだけです。 ANSIはこれを8ビットに拡張し、シンボル128から255までにいくつかの異なるコードページがあります。

ANSIという命名は、実際にはこのコードページを定義するISO/IEC 8859規格であるため、正しくありません。参考のために ISO/IEC 8859 を参照してください。 ISO/IEC 8859-1からISO/IEC 8859-16までの16のコードページがあります。

Windows-1252 これもISO/IEC 8859-1に基づいており、修正は主に C1コントロールセット の範囲で128から159です。 -1252は、ISOと8859の間に2番目のハイフンを付けたISO-8859-1としても参照されます。(信じられない!誰がそのようなことをするのか!?)

12

基本的に "ANSI"はWindows上のレガシーコードページを指します。このトピックについては、 Raymond Chenによる記事 も参照してください。最初の127文字は、ほとんどのコードページでASCIIと同じですが、大文字は異なります。

ただし、ANSIは自動的にCP1252またはLatin 1を意味するのではなく意味しません

あなたがにもかかわらずすべての混乱はあなたが単にそのような問題を回避し、ユニコードを使うべきです。

3
Joey

あなたのPCが "Western" PCではなく、どのコードページが使われているのかわからない場合は、このページをご覧ください。 各国語サポート(NLS)APIリファレンス

[マイクロソフトはこのリファレンスを削除し、Webアーカイブの形式にします 各国語サポート(NLS)APIリファレンス

またはあなたのレジストリを照会することができます。

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

私は "ANSI"テキストがストリーミングテキストの流れを変更するためにANSI.SYSドライバを通してDOSで使用可能な疑似VT-100エスケープコードを参照した時のことを覚えています....おそらくあなたが参照しているものではなく http://en.wikipedia.org/wiki/ANSI_escape_code

1
jmucchiello

シングルバイト文字を使用する場合、ASCIIの形式で最初の127文字が定義されます。 128から255までの拡張文字は、他の言語に対する限定的なサポートを可能にするために、さまざまなANSIコード・ページによって定義されています。 ANSIでエンコードされた文字列を理解するためには、それがどのコードページを使用しているのかを知る必要があります。

1
Eric Petroelje