■ 文字コード
・ アスキーコード、JIS標準文字コード(JJIS X 0201)他
制御コード
・ PCからの送信文字
■ アスキーコード
・ 文字コードはアスキー(ASCII)コードが基本です。 もともとは、ANSI(米国規格協会) が制定した文字コードで American Standard
Code for Information Interchangeの頭文字をとったものです。ANSIコードと呼ばれることもあります。 7ビット(0~127)の文字
コードセットの文字コードセットで、今ではISO 646にもなっています。
■ ANKコード(JIS X 0201)
・ このアスキーコードの上位 ビット A0~DFの部分にカタカナ等を追加して(■部分)、また\(バックスラッシュ) を¥(円記号) 、
~(チルダ)を ¯(オーバーバー)に変更(■部分)して 規格化した8ビットのコードセットががJIS半角英数カナ文字コード(JIS X
0201) です。通称、ANK(Alphabet Numeric Kana: アンク)コードと呼ばれます。
(注) 半角のバックスラッシュ \ はフォントをArial にして\をキーインすると表示することができます。
・日本のJIS X 0201のようにASCIIコードの無定義MSBを”1”にした8ビットの半角文字コードセットが世界各国にありISOで規格化されて
います。~
(例) ISO 8859-1 (西欧文字追加)、ISO8859-5(ロシア語用キリル文字追加)、ISO 8859-6(アラビア文字追加)他
< ASCIIコード vs ANKコード比較 16進数表示 > | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ASCIIコード (ISO 646) |
|
ANKコード (JIS X 0201) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
・ 制御コード
下記のコードは制御コードと呼ばれ、データ通信で機器の制御やデータの制御などにつかわれます。 C、C++
言語のプログラムのなかでコピーしてつかえるようにプリプロセッサの形で書いてあります。
#define NULL 0x00 //ヌル //エスケープ文字: \0
#define SOH 0x01 //Start of Heading ヘッダー開始
#define STX 0x02 //Start of Text テキスト開始
#define ETX 0x03 //End of Text テキスト終了
#define EOT 0x04 //End Of Transmission 転送終了
#define ENQ 0x05 //ENQuiry 問い合せ、エンク
#define ACK 0x06 //Acknowledge 肯定応答 アック
#define BEL 0x07 //Bell ベル //エスケープ文字: \a
#define BS 0x08 //Back Space バックスペース //エスケープ文字: \b
#define HT 0x09 //Horizontal Tabulation 水平タブ //エスケープ文字: \t
#define LF 0x0a //Line Feed 改行 //エスケープ文字: \n
#define VT 0x0b //Vertical Tabulation 垂直タブ //エスケープ文字: \v
#define FF 0x0c //Form Feed 改ページ //エスケープ文字: \f
#define CR 0x0d //Carriage Return 復帰 //エスケープ文字: \r
#define SO 0x0e //Shift Out シフトアウト
#define SI 0x0f //Shift In シフトイン
#define DLE 0x10 //Data Link Escape 伝送制御拡張
#define DC1 0x11 //Device Control 1 装置制御1
#define DC2 0x12 //Device Control 2 装置制御2
#define DC3 0x13 //Device Control 2 装置制御3
#define DC4 0x14 //Device Control 4 装置制御4
#define NAK 0x15 //Negative Acknowledge 否定応答 ナック
#define SYN 0x16 //Synchronous idle 同期信号
#define ETB 0x17 //End of Transmission Block 転送ブロック終了
#define CAN 0x18 //Cancel 取消 キャンセル
#define EM 0x19 //End of Medium 媒体終端
//#define SUB 0x1a //Substitute 置換
#define EOF 0x1a //End of File MS-DOSにおけるテキストファイルの終端文字//Windowsのテキストファイル終端にはない
#define ESC 0x1b //Escape 拡張 エスケープ
#define FS 0x1c //File Separator ファイル分離
#define GS 0x1d //Group Separator グループ分離
#define RS 0x1e //Record Separator レコード分離
#define US 0x1f //Unit Separator ユニット分離
#define SPC 0x20 //Space 空白 スペース
#define DEL 0x7F //Delete 削除 デリート
・改行コード
タイプライタ時代からの歴史的経緯から改行コードはシステムによりことなる。 プログラムで\nと書いた場合、この改行コードは
システム(コンパイラ)により それぞれLINUXはLF(0x0A)に、WindowsはCR(0x0D) + LF(0x0A)に、Macintoshは CR(0x0D)に
コンパイルされる。
① UNIX、LINUX : LF(0x0A)
② MS-DOS、 Windows : CR(0x0D) + LF(0x0A)
③ Macintosh : CR(0x0D)
以下に Windowsのアクセサリとして付属している、メモ帳で作成したてテキストファイルをバイナリーエディタ(スターリング)でみた結果を示す。
メモ帳での表示 | バイナリーエディタでの見た場合 | 備考 | |
Windows標準の 「メモ帳」で 作成したテキストファイル |
![]() |
![]() |
改行コードが 0x0D + 0x0Aである ことがわかる。 |
■ JIS漢字コード
■ 文字サイズ
すべて2バイトで構成されている文字コードセットです。1バイトのANK文字はふくまれて いません。
■ JIS化された漢字のコードセットです。現在は①のJIS拡張漢字コードが主流となってきている。
2000年以前は②③が使用されていたこともあり今でも各方面で②③は使用されている。
■ Microsoftは、2007年に発売したWindows Vistaから、標準搭載フォントの字形を旧来のJIS X 0208:1990のものから、JIS
X 0213:2004のものに変更した
① JIS拡張漢字コード(JIS X 0213:2004)
・ 符号化文字集合を規定している規格である。
・ Unicode3.2版(2002年3月制定から ユニコードに正式採用されている。
・ 11,233文字から構成されています。
・ JIS X 0212がJIS X 0208にない文字を集めた文字集合であるのに対し、JIS X 0213はJIS X 0208を包含し更に第3・第4水準
漢字などを加えた上位集合となっています。
・ 第3水準漢字数は1908文字、第4水準漢字2436字である。
・ JIS X 0213の代表的な符号化方式(注)としては、下記4つがある。
1. ISO-2022-JP-2004
2. Shift_JIS-2004
3. EUC-JIS-2004
4. UTF-8
(注) 文字符号化方式とは、符号化文字集合で文字に対応付けた非負整数値を、実際にコンピュータが利用できるデータ列(通常、バイト列)に変換する符号化方式。
② JIS基本漢字コード(JIS X 0208:1990)
・ 正式名称は「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」です。
・ 第1、第2バイトとも 16進数表記で 0x21~0x7Eの範囲で定義されており、94×94 = 8,836 の文字を表すことができる領域が確保
されています。
・ 1990年版では6,879文字及び図記号から構成されています。。第1バイトの 0x30 からは第1水準漢字 2,965文字、第1バイトの0x 50
からは 第2水準漢字 3,390文字 が規定されています。
③ JIS補助漢字コード(JIS X 0212:1990)
・ 正式名称は「情報交換用漢字符号―補助漢字」です。
・ JIS X 0208に含まれていないもので、日常の国語の文章の表記に用いる文字として必要だと思われる文字が収録されています。
・ 6,067字の文字が規定されています。漢字は第3水準、第4水準会わせ5801文字で構成されています。
・ Unicode2.1から採用されった。。
・ OSとしては、WindowsNT4.0、2000、XP、Vistaに採用されています。但し、実際に使用できるためにはアプリケーション側での適応が
必要です。
■ シフトJIS
MS-DOSの時代にできた『符号化方式』で、日本語半角英数カナコード(JIS X 0201)の 80~9F、 または E0~FF が空いていることを利用して
これらのを第1バイトとして次にくる第2バイトを組み合わせて漢字コードを規定する符号化方式である。
下記の長所①②③と云った点からCPUリソースの小さい組み込みマイコンとPC間や通信の相手が特定できる場合の通信用”漢字コード
セット”として、シフトJISの文字コードセットはきわめて有用である。
<長所>
① 2バイトの全角文字と、1バイトのJIS X 0201で定義したいわゆる半角カナ文字を同一のコード体系で表現できる。
② エスケープシーケンスなしで漢字を2バイトで表現できる
③ MS-DOS時代の漢字ROMなど膨大なハード、ソフトの技術資産がある。
④ 以前は シフトJIS文字コードセットに方言が多く混乱した時代があったが最近はSift-JIS 2004(IANA(アイアナ):Internet
Assigned
Numbers Authority)が制定されるなど統一化&規格化が進んできている。
⑤ 以前は、全角文字は、JIS X 0208の6,879文字(内訳:第1水準漢字2,965文字、第2水準漢字3,390文字を中心として、ひらがな、
カタカナ、各種記号や、ギリシャ文字、キリル文字などの非漢字524字)であったが、Sift-JIiS 2004からは4,354文字(内訳:第3水準
文字1,259字、第4水準漢字2,346字記号659字)が追加され11,233文字となった。
<欠点>
① 半角カナを1バイト領域に確保していることからインターネットなどグローバルな通信で使用すると問題が発生する。
② 2バイト目にASCIIコードと同じ0x80以下が現れるので文字列後部から判読しずらい。
③ 0x5C(\バックスラッシュ、¥に相当)が漢字の2バイト目に使用されている。CやPerlなどでは0x5Cはエスケープシーケンス(予約語)に
使用されている。 シフトJISを想定していないプログラミング環境で問題が発生する。
④ JIS X 0208(JIS 漢字コード)は表示できるが 補助漢字は表示できない。
⑤ 方言が沢山ある。(IBM PC-DOS Code、NEC MS-DOS Code、Microsoft Windows Code-Japanese
Shift JIS)
<シフトJISで使われている値>
シフトJISで使われている値は下表の■部分です。
1バイト目
0x81~0x9f, 0xe0~0xfc
|
2バイト目
0x40~0x7e, 0x80~0xfc
|
■ ユニコード 要約
<特徴>
・一つの文字に対して、全世界で重複のない、ユニークな文字コードが設定されている。
<歴史・現在>
・ ゼロックス、マイクロソフト、IBM、サンマイクロシステムなどがUnicodコンソーシアムをつくり開発を進めた。
・ 1993年にISO10646の一部に採用された。徐々にUnicodeがISO10646になる流れとなっている。
・ 現時点(2008.11.24)では Unicode 第5.1版(2008年4月制定)である。
<文字サイズ>
・ 文字コードセットしては2~4バイトの可変長になっている。
・ 開発当初は2バイト固定長であったが 対応文字数が 2バイトの65536以上となったことからUnicode第2.0以降変更となった。
<サロゲートペア>
・ 未使用の2バイト+2バイト で4バイトの文字コードを設定し、文字コード数不足に対応することとなった。 そして、この4バイトの
文字はサロゲート文字、また2つの2バイトのペアはサロゲートペアと命名された。
・ サロゲートペア(Surrogate Pair:代理ペア)と呼ばれる予備バイトを使用した2バイトのペアをBMP(Basic Multilingual Plane)面に
1,048,576(=1024×1024)個つくり各ペアに1個の文字を割り当て不足分に割り当てる方式が採用されている。この結果、4バイトの文字が
出現してしまうこととなったが 1,112,064(= 256×256 - 1024×2 + 1024×1024)個の文字にUnicodeコードを割り当てることができるように
なった。
具体的には 0xD800~0xDBFF(上位サロゲート) と 0xDC00~0xDFFF(下位サロゲート)が 4バイト文字に使用されてる。
<日本語>
・ JIS漢字コードは Unicode 第3.2版(2002年3月制定)からJIS X 0213が正式採用されている。JIS X 0213の一部の漢字はサロゲートペア
方式の拡張領域に配置されている。OSとアプリケーションが共に対応していないと表示できない。
・ JIS X 0213は CJK(Chinese-Japanes-Korean)統合漢字の一部となっている。
・ ANKコード(JIS半角英数カナ文字コード:JIS X 0201)は当然ながらは採用されていない。したがって 半角カタカナ、半角円記号\、半角
オーバーバー ̄はUnicodeには存在しない。
<OS>
・ NT4.0、Windows2000、XP、Vista、Mac、Linuxの内部で採用されている。
・ WindowsはシフトJISコードからUnicodeへの転換期にある。
<ファイルの読み書き>
・プログラムはシフトJISのファイルを呼び出すとき、すまわちメモリにロードする時Unicodeに変換している。Unicodeで処理を行い、ファイルに
書き込む時はシフトJISに変換してファイルしている。
<コードセットの調べ方>
・ Unicode Consortiumの URL : Unihan Database で調べることができる。
<ユニコード表記>
ユニコードの文字表記であることを明記する場合は、16進文字の前に ” U+ ”をつける。(例 及び下表参照)
例 あ : U+3042
<ユニコードの例>
数値の表記は、decimalを除きすべて16進数表記です。尚、decimalは10数表記です。
文字 ( )内の文字は表示されません |
ユニコード表記 | decimal | UTF-8 | UTF-16 | UTF-32 | 備考 |
あ | U+3042 | 12354 | E3 81 82 | 3042 | 00003042 | ひらがな |
い | U+3044 | 12356 | E3 81 84 | 3044 | 00003044 | ひらがな |
う | U+3046 | 12358 | E3 81 86 | 3046 | 00003046 | ひらがな |
東 | U+6771 | 26481 | E6 9D B1 | 6771 | 00006771 | 漢字 |
京 | U+4EAC | 20140 | E4 BA AC | 4EAC | 00004EAC | 漢字 |
都 | U+90FD | 37117 | E9 83 BD | 90FD | 000090FD | 漢字 |
A | U+41 | 65 | 41 | 0041 | 00000041 | アルファベット |
B | U+42 | 66 | 42 | 0042 | 00000042 | アルファベット |
C | U+43 | 67 | 43 | 0043 | 00000043 | アルファベット |
0 | U+30 | 48 | 30 | 0030 | 00000030 | 数字 |
1 | U+31 | 49 | 31 | 0031 | 00000031 | 数字 |
2 | U+32 | 50 | 32 | 0032 | 00000032 | 数字 |
(NULL) | U+0 | 0 | 00 | 0000 | 00000000 | ヌル:0x00、制御文字、非表示 |
(STX) | U+1 | 1 | 01 | 0001 | 00000001 | 制御文字、非表示 |
(SOT) | U+2 | 2 | 02 | 0002 | 00000002 | 制御文字、非表示 |
(LF) | U+A | 10 | A | 000A | 000000A | 制御文字、非表示、Line Feed 改行 |
(VT) | U+B | 11 | B | 000B | 0000000B | 制御文字、非表示、Vertical Tabulation 垂直タブ |
(FF) | U+C | 12 | C | 000C | 0000000C | 制御文字、非表示、Form Feed 改ページ |
# | U+0023 | 35 | 23 | 0023 | 00000023 | 特殊記号 |
% | U+0025 | 37 | 25 | 0025 | 00000025 | 特殊記号 |
\ | U+005C | 92 | 5C | 005C | 0000005C | 特殊記号、バックスラッシュ:0x5C |
■ ユニコードの構成
ユニコード表記 | 名称 | 文字数 | 内容 | 備考 |
U+0000~U+007F | アスキー(ASCII) | 128 | 制御文字、英数字 | 半角英数は0xFF10~0xFF5Aに設定されている |
U+0080~U+00FF | Latin1 | 128 | フランス・ドイツ・イタリア・スペイン・ポルトガルなど、 西ヨーロッパ諸国で共通に使われている文字コード |
半角カタカナは0xFF66-0x9Dに設定されている |
U+3041~U+3096 | ひらがな | あいうえおぁぃぅぇぉ…… | ||
U+30A1~U+30FA | カタカナ | アイウエオァィゥェォ…… | ||
U+4E00~U+9FFF | CJK統合漢字 (CJK Unified Indeographs) |
約20,000 | ||
U+3400~U+4DBF | CJK統合漢字拡張A | 約6,500 | 1999年9月制定 | |
U+20000~U+2A6DF | CJK統合漢字拡張B | 約42,000 | 2001年3月制定 | |
U+2A700~U+2B73F | CJK統合漢字拡張C | 4,149 | 2008年12月制定 | |
U+2B740~U+2B81F | CJK統合漢字拡張D | 222 | 2010年10月制定 | |
U+2B820-U+2CEA1 | CJK統合漢字拡張E | 5,762 | 2014年9月制定 | |
U+F900~U+FAFF U+2F800~U+2FA1F |
CJK互換漢字 | CJK統合漢字の中にある文字ではあるが若干 形状の異なる文字などが制定されている (例) 欄(統合漢字 U+6B04) 欄(互換漢字 U+F91D) |
互換漢字はIVS (Ideographic Variation Sequence) を統合漢字に追加して区別方向にある |
■ ユニコード と JIS漢字
・JIS漢字はCJK統合漢字にすべて網羅されている。
JIS漢字(JIS X 2013(2002))は、2002年3月に制定されたUnicode 3.2.0から正式対応となった。
・JIS漢字は JIS X 0213で制定されている。JIS X 0213(2004年)には11,233字が規定されている。
JIS X 0213は、非漢字、JIS第1~第4水準漢字をふくむ上位規格である
制定年 | 第1水準漢字 | 第2水準漢字 | 第3水準漢字 | 第4水準漢字 | 非漢字 | 合計 |
---|---|---|---|---|---|---|
1978年 | 2,965字 | 3,384字 | - | - | 453字 | 6,802字 |
1983年 | 3,388字 | 524字 | 6,877字 | |||
1990年 | 3,390字 | 6,879字 | ||||
1997年 | ||||||
2000年 | 1,249字 | 2,436字 | 1,183字 | 11,223字 | ||
2004年 | 1,259字 | 11,233字 |
・漢字の水準
水準 | 分類 | 内容 |
第1水準漢字 | 使用頻度の高い漢字 | 当用漢字字体表、当用漢字補正案および人名用漢字別表を基本として、 多種の漢字表に共通して出現する文字が選ばれた 都道府県名および市区町村名に使用される漢字は、すべて第1水準に含まれている |
第2水準漢字 | 使用頻度の低い漢字 | |
第3水準漢字 | 日常生活で使われることはほとんどない漢字 | |
第4水準漢字 | 日常生活で使われることはほとんどない漢字 |
■ CJK統合漢字(CJK unified ideographs)
中国語、日本語、朝鮮語、ベトナム語で使用されているの中で漢字(表意文字)のなかで、ユニコードに採用されている漢字。 各漢字に符号が設定されている。
Unicode 10.0 段階での文字数は以下のとおりである(互換漢字のうち、統合漢字扱いされる12字を加えると87,789文字になる)。
範囲 | 名称 | 字数 | 備考 |
---|---|---|---|
U+4E00 - U+9FD5 | CJK Unified Ideographs | 20,950 | 基本多言語面、各国で日常使われるほとんどの漢字が含まれる |
U+3400 - U+4DFF | CJK Unified Ideographs Extension A | 6,582 | |
U+20000 - U+2A6FF | CJK Unified Ideographs Extension B | 42,711 | |
U+2A700 - U+2B734 | CJK Unified Ideographs Extension C | 4,149 | |
U+2B740 - U+2B81F | CJK Unified Ideographs Extension D | 222 | |
U+2B820 - U+2CEAF | CJK Unified Ideographs Extension E | 5,762 | |
U+2CEB0 - U+2EBE0 | CJK Unified Ideographs Extension F | 7,413 | |
合計 | 87,789 |
■ ISO-2022-JP
・ JISコードと呼ばれることもある。
・e-mail等 インターネットなどのグローバルな環境で日本語を使用する場合に使用されている文字符号化方式である。
・「JIS X 0208:1997」に基づく文字符号化方式ことである。
・通称として「JISコード」とも呼ばれている。 シフトJISなどより歴史は古い。JIS X 0208の初版制定は:1978年である。
・学術的なことも考慮したことから、文字集合としてはテン文字集合、国際基準版図形文字なども含まれている。
・ ISO-2022-JPは、JIS X 0213の符号化方式のひとつで、7ビットのみを用いる1バイト文字集合と2バイト文字集合を切り替えて使用する符号化方式である。
(JIS X 0213:2004の附属書2による)
コードレンジ | 通称 | 規格 | 備考 | |
1バイト文字集合 | 0x20 ~ 0x7f | ASCII文字 | ANSI、ISO646 |
|
2バイト文字集合 | 0x2121 ~ 0x747e | JIS漢字 | JIS X 2013 |
データをメモリ上に配置する方式のことをいう。多々あるが実際にはビッグエンディアンとリトルエンディアンを理解していればよいと思います。
Windowsは視覚的にわかりにくいリトルエンディアンです。
(1) ビッグエンディアン
メモリ上にデータをならべるとき 上位にデータの上位バイトを順番にならべる方式を云う
(2) リトルエンディアン
メモリ上にデータをならべるとき 下位から順番にデータの上位バイトをならべる方式を云う。
(例) 16進数で0xABCDEFGH をメモリ上、アドレス0x00000000~0x00000003に並べた場合を例にとると下表となる。
アドレス番号 | ビッグエンディアンの場合 (IBM汎用機、Macintosh、Sun Spark、モトローラ MC68000等) |
リトルエンディアンの場合 (インテルX86系、Linux) |
備考 |
0x00000000 | AB | GH | |
0x00000001 | CD | EF | |
0x00000002 | EF | CD | |
0x00000003 | GH | AB |
■ エンコーディング
コンピュータや通信の分野では、データをシリアルのバイト列に変換すること、またはその変換規則を「エンコーディング」と呼ぶ。エンコー
ディングには ユニコードには下記3通りがある。
(1) UTF-8
<長所>
・ASCII文字と互換性がある
・英数字は1バイトとなる為英語圏ではCPUの処理効率がよい。
・バイト単位でのデータ転送のためエンディアンの区別が不要である。
<短所>
・1バイト~6バイトの可変長となり、小規模システムにとっては負担が大きい
・漢字は3バイト以上である。漢字が多いデータであればUTF-16のほうがCPUの処理効率は高い。
★ UTF-8は 以下のルールで シリアルのバイト列に変換される。
① U+0000~U+007Fは1バイトで、
U+0080~U+07FFは2バイトで、
U+0800~U+FFFFは3バイトで、
U+10000~U+10FFFFは4バイトに表現する。
Unicode | UTF-8 | バイト数 | |
---|---|---|---|
U+0000~U+007F | 00~7F | 1 | |
U+0080~U+07FF | C2 80~DF BF | 2 | |
U+0800~U+FFFF | E0 A0 80~EF BF BF | 3 | |
U+10000~U+10FFFF | F0 90 80 80~F4 8F BF BF | 4 |
②1バイト目は16進数で00~7F・C0~FFを、2~4バイト目は 80~BFを使うことで、1バイト目と2バイト目以降が紛れないようにする。
具体的には以下のように 特定のビットを固定するビット変換をおこなう
Unicodeの2進数 | UTF-8の2進数 |
---|---|
0000 0000 0yyy zzzz | 0yyy zzzz |
0000 0uvv xxyy zzzz | 110u vvxx 10yy zzzz |
tttt uuvv xxyy zzzz | 1110 tttt 10uu vvxx 10yy zzzz |
rrss tttt uuvv xxyy zzzz | 1111 00rr 10ss tttt 10uu vvxx 10yy zzzz |
0001 0000 tttt uuvv xxyy zzzz | 1111 0100 1000 tttt 10uu vvxx 10yy zzzz |
(2) UTF-16
・当初ユニコードはすべて2バイトであったが、現在は4バイトのもの一部もある。
・Windows XP,Vistaの内部処理に使用されている。
(3) UTF-32
<長所>
・すべての文字が4バイトの固定長である。
・場合によってはデータの処理が簡単である。
<短所>
・すべての文字が4バイトとなり、英数字などきわめてCPUの処理効率が悪い
■ エンコーディングとエンディアン
UTF-16とUTF-32には ビッグエンディアンとリトルエンディアンがある。 送信開始または途中でエンディアンを切り替える場合には文字の
前にバイトオーダーマーク BOM(Byte Order Mark)と呼ばれる識別コードを挿入する。特にBOMがない場合は ビッグエンディアンとされる。
尚、UTF-8には バイト単位でのデータ転送のためエンディアンの区別がない。
エンコーディング | ビッグエンディアン | リトルエンディアン | バイトオーダーマーク BOM |
UTF-16 | UTF-16 BE | UTF-16 LE |
BOM: FEFF (例) BE → LE の場合 FFFE 6B30 6130 6F30 |
UTF-32 | UTF-32 BE | UTF-32 LE |
■ PCからの送信文字
PCから送信されてくる文字は数値でもソースコード上”文字”か”数字”かによって送られてくるデータはことなります。
順番としては以下となります。
・文字列は先頭から順番に1バイトづつ送られてくる。
・整数は下位バイトから上位バイトへと順番に1バイトづつ送られてくる。
以下に、PCからPICへRS232Cで送られてくるデータをPIC側液晶に表示した例を紹介します。
★ 液晶には1バイトのデータを文字 %Cで表示したものと、16進数 %Xで表示したものが2つ表示されています。
★ 0= 、 1= 、 2=、 3= はそれぞれ1番目、2番目、3番目、4番目にPICに送られてきたデータをあらわします。
//------------------------------------------------------------------------------------------- (1)文字”a”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部>
char x = 'a'; sprintf(buf,"%c",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------- (2)文字”2”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部> int x = 2; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//-------------------------------------------------------------------------------- (3)文字”59”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[0] = getc(); lcd_clear(); printf(lcd_data,"0=%c %x",buf[0],buf[0]); } <PC側送信プログラム部> int x = 59; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//--------------------------------------------------------------------------- (4)文字”456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 456; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------------- (5)文字”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 3456; sprintf(buf,"%d",x); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//-------------------------------------------------------------------------------------------- (6)整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = 3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
(6)ショート整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> short int x = 3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//----------------------------------------------------------------------------------- (7)負の整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> int x = -3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//------------------------------------------------------------------------------------------- (8)負のショート整数”3456”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> short int x = -3456; Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 &x, sizeof(int), &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
//--------------------------------------------------------------------------------------------- (9)文字列”abcd”の送受信 <PIC側受信プログラム部> #INT_RDA void rs232c() { buf[ix] = getc(); if(ix >= 3) { lcd_clear(); printf(lcd_data,"0=%c %x 1=%c %x",buf[0],buf[0],buf[1],buf[1]); lcd_cmd(0xC0);//2行目の先頭へ printf(lcd_data,"2=%c %x 3=%c %x",buf[2],buf[2],buf[3],buf[3]); ix = 0; } ix++; } <PC側送信プログラム部> sprintf(buf,"abcd"); szStr = &buf[0]; nNumberOfBytesToWrite = strlen(szStr); Ret = WriteFile( //データの送信 hPort, // 通信デバイスのハンドル:CreateFile()で取得したハンドルを指定 szStr,// 送信データのポインタを指定 nNumberOfBytesToWrite, // 送信するデータのバイト数を指定 &nNumberOfBytesWritten, // 実際に送信されたバイト数が格納されるポインタを指定 NULL // 通信とは関係ない引数なのでNULLを指定 );
■ フォント
■ 分類
1. データ形式による分類
1.1 ビットマップフォント
・ ドットの組み合わせで文字を表現したフォント
・ ラスターフォント などとも呼ばれる
1.1.1. ビットマップフォント
・Windowsで使われるフォント
1.1.2. 丸漢フォント
・ Macintosh で使われるフォント
1.1.3. BDF
・ UNIXで使われるフォント
・ Glyph Bitmap Distribution Format の略である。
1.2 スケーラブルフォン
・ 線の位置や形、長さなどで文字の形を表現したフォント
1.2.1. ストロークフォント
・ 線の太さのないフォント
・ CADなどで見かける
・ 表示速度が速い
1.2.2. アウトラインフォント
・ 太さのあるフォント
・ 袋文字フォント などとも呼ばれる
・ 現在のPCで最もよくつかわれている
1.2.2.1 TrueTypeフォント
・ アップルコンピュータとマイクロソフトが共同開発したアウトラインフォントで、ビットマップフォントを埋め込むことも可能である。
・ Windows 、Macintoshで使われているフォント
・ 2次スプライン曲線で制御が行われている。
1.2.2.1 PostScriptフォント
・ アドビシステムズが開発したアウトラインフォントである。
・ Macintosh で使われているフォント
・ 3次べジェ曲線で制御が行われている。
・ 印刷業界でよく使われている。
2. フォント幅による分類
2.1 等幅フォント
・ 文字の字の幅が一定のフォント
2.2 プロポーショナルフォント
・ 文字の幅が文字により違うフォント
■ フォントの拡張子
PC | 拡張子 | 名称 | 備考 |
Windows | ttf | TrueTypeフォント | Windows標準のアウトラインフォント |
otf |
オープンタイプフォント | アウトラインフォント | |
ttc | TrueType Collection | アウトラインフォント | |
fon | ビットマップタイプ | Windows標準のビットマップフォント | |
fnt | M.U.G.E.N | ビットマップフォン | |
Macintosh |
■ JIS漢字 フォントグリフ
・01区~94区まである。
・各区には最大94文字のフォントデータが格納される。番号何点と呼ばれる。 (例)"神"はJIS漢字の区点番号が "32区31点"
の漢字である。
・ 漢字がは "亜"から始まり、JIS漢字コードは 0x3021である。
・実際には文字データがないものでもグリフデータはあるものとしてグリフデータのオフセット位置は計算する。
・通常グリフデータはコード順に 0x2121 から 0x747e まで, ベタに書きこまれている。