| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
116 バイト追加 、 2020年2月16日 (日) 04:21
編集の要約なし
==[[文字コード]]=={{category [[Category:文字化け}}]]
{{amazon|4774138959 }}
*この本からのメモ
*文字コードについての非常にわかりやすい解説があるため以下にメモ[[文字コード]]についての非常にわかりやすい解説があるため以下にメモ
===ワイド文字列とマルチバイト文字列===
*ワイド文字列とマルチバイト文字列はC言語における用語ワイド文字列とマルチバイト文字列はC言語における[[用語]]
====マルチバイト文字列(multibyte character)====
*C言語の char には1バイトしか格納できないため、Shift-JIS なり EUC なり UTF-8と呼ばれる '''[[エンコーディング]]''' を利用して複数バイトで日本語の一文字を格納する。
=====問題点=====
*この方式だと、char 配列を最初から見ていかないとどこが文字の切れ目か判定できないという問題がある。
====ワイド文字列(wide character)====
*マルチバイトの問題点を踏まえ、日本語を含む十分なサイズの型で1文字を表現すればよいという発想
*C言語での C[[言語]]での wchar_t 型であり、この配列で文字列を表現したのが '''ワイド文字列'''=====C言語でのリテラルC[[言語]]でのリテラル=====
*ワイド文字
L'a'
===Unicode===
*現状では、LinuxでもWindowsでも、ワイド文字として 現状では、Linuxでも[[Windows]]でも、ワイド文字として Unicode を利用することが多い
====歴史====
*Xeroxが提唱しUnicod Consortiumにより制定
*コンピュータで文字を扱うために、対象とする文字をを決め、番号を振た文字の集合
*Unicodeの場合、文字にそれぞれ振られている番号をコードポイントと呼ぶ
====[[エンコーディング]](character encoding scheme)====*文字コード(Unicodeではコードポイント)をメモリやディスク上にどのように表現するかは文字コードとは別の話でこの論理的な値を、バイトやビットにどう表現するのかを定めたものをエンコーディングと呼ぶをメモリやディスク上にどのように表現するかは文字コードとは別の話でこの論理的な値を、バイトやビットにどう表現するのかを定めたものを[[エンコーディング]]と呼ぶ*Shift-JISとEUCは対象とする文字集合はどちらもほぼ同じ(JIS X0208)だが、メモリ上の表現形式が異なるため、異なるエンコーディングと位置づけるだが、メモリ上の表現形式が異なるため、異なる[[エンコーディング]]と位置づける====Unicode のエンコーディングの[[エンコーディング]]====
=====UTF-16=====
*1文字当たり2バイト割り当てる
=====UTF-8=====
*UTF-16では、アルファベットを表現するにも2バイト消費してしまう上、既存のASCIIコードとの互換性もないため、考えられた。
*ASCIIと同じ部分は1バイト(0x00 ~ 0x7F)、その他の部分を2、[[その他]]の部分を2〜6バイトで符号化
**http://ja.wikipedia.org/wiki/UTF-8
===機種依存文字===
!内容
|-
|[[Windows]]-31J|[[Windows ]] 3.1(J)のリリースに合わせて、マイクロソフトがJIS X 0208 に 機種依存文字(NEC特殊文字、NEC選定IBM拡張文字、IBM拡張文字)を統合して作られた文字コード
|-
|MS932
|Javaで、「IBMのコードページ932」と「WindowsJavaで、「IBMのコードページ932」と「[[Windows]]-31J」を区別する
|-
|CP932
|MS-DOSとWindowsにおける日本語コードページを表す。「WindowsDOSと[[Windows]]における日本語コードページを表す。「[[Windows]]-31J」が制定されるまでは、OEMベンダによって文字集合が違う。
|-
|MS漢字コード
|-
|OEMコードページ932
|[[Windows ]] 3.1日本語版の発売以前における、OEMベンダ各自の拡張を許した仕様の文字セット
|-
|}
|-
|SJIS
|Shift_JISの短縮形。JavaではShift_JISと同義語Shift_JISの短縮形。[[Java]]ではShift_JISと同義語
|-
|}
====CP932の誕生と発展====
*CP932が、現在の「WindowsCP932が、現在の「[[Windows]]-31J」の形として完成に至るまでには複雑な経緯がある。
*1982年(JIS X 0208-1983策定の前年)、JIS C 6226を複雑にシフトさせた文字符号化方式としてShift JISが誕生。
*Shift JISはマイクロソフトにより、MS-DOSにおける標準日本語コードとして採用「コードページ932(CP932)」という管理番号を与えられた。
*マイクロソフトはMS-DOSにおける唯一の日本語用コードページである「CP932」をOEMメーカーの自由に任せていた。
*NECのPCNECの[[PC]]-9800シリーズ、IBMのPS/55シリーズ、富士通のFMRシリーズなどは全てMS-DOSを搭載しており文字符号化方式もShift_JISを採用しているが、登録されている文字集合がバラバラ
=====OEMコードページの統合=====
*マイクロソフトは1993年、Windows3マイクロソフトは1993年、[[Windows]]3.1の日本語版を出すにあたり、「CP932」の仕様をOEMメーカーの自由に任せるという方針を撤回。*日本のパーソナルコンピュータ市場で、特に大きなシェアを持つIBM、NEC2社の統合コードをWindowsにおける日本語標準コードとした日本のパーソナルコンピュータ市場で、特に大きなシェアを持つIBM、NEC2社の統合コードを[[Windows]]における日本語標準コードとした*これをIANAに「WindowsこれをIANAに「[[Windows]]-31J」という名で登録
=====統合の概要=====
*ベースとなる符号化文字集合としてJIS X 0208-1990
*NECが89 - 92区に登録していた漢字と非漢字は全て継承。このエリアの374文字のことを「NEC選定IBM拡張文字」と命名。
*IBMが115 - 119区に登録していた漢字と非漢字も全て継承。このエリアの388文字のことを「IBM拡張文字」と命名。
=====[[Windows]]-31Jに重複登録されたコード=====
*統合の過程で重複する文字が登録されてしまっている。
*NEC選定IBM拡張文字とIBM拡張文字については、まるごと重複
*「¬」「∵」については三重複
=====文字コード変換時の重複文字の影響[[文字コード]]変換時の重複文字の影響=====*文字コード変換を行う際に、別の文字コードから、「Windows文字コード変換を行う際に、別の文字コードから、「[[Windows]]-31J」に変換する場合に、重複するどちらの文字へと変換するべきかが問題
====Java での文字コードの扱いでの[[文字コード]]の扱い====*Java での文字コードの扱いでの[[文字コード]]の扱い

案内メニュー