16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"SJIS <-> JIS 変換 厳密編"
この発言に対し以下のコメントが寄せられています
#00508 アイクビー さん RE:SJIS <-> JIS 変換 厳密編
漢字コード系がわからない時に、ヒットする率で調べる場合は、とりあえず仮
定しているコード系で定義されていないコードをチェックアウトする必要があり
ます。この例では、PC98Ce2の漢字(旧JISらしいです)に定義されていない場合、
$0000 を返します。
type
TCOLS = (
iColRANGE,
iColJIS,
iColSJIS
);
const
fMATRIX: array[0..121] of array[TCOLS] of Word = (
// JIS SJIS JIS第1水準
// -- ----- ----- ----------
( 63, $2121, $8140 ), // 記号
( 31, $2160, $8180 ),
( 14, $2221, $819F ),
( 10, $2330, $824F ), // 英数字
( 26, $2341, $8260 ),
( 26, $2361, $8281 ),
( 83, $2421, $829F ), // ひらがな
( 63, $2521, $8340 ), // カタカナ
( 23, $2560, $8380 ),
( 24, $2621, $839F ), // ギリシャ文字
( 24, $2641, $83BF ),
( 33, $2721, $8440 ), // ロシア文字
( 15, $2751, $8470 ),
( 18, $2760, $8480 ),
( 94, $3021, $8C9F ), // あ - い
( 63, $3121, $8940 ), // い - え
( 31, $3160, $8980 ), // え - お
( 94, $3221, $899F ), // お - か
( 63, $3321, $8A40 ),
( 31, $3360, $8A80 ),
( 94, $3421, $8A9F ), // か - き
( 63, $3521, $8B40 ),
( 31, $3560, $8B80 ),
( 94, $3621, $8B9F ), // き - く
( 63, $3721, $8C40 ), // く - け
( 31, $3760, $8C80 ),
( 94, $3821, $8C9F ), // け - こ
( 63, $3921, $8D40 ),
( 31, $3960, $8D80 ),
( 94, $3A21, $8D9F ), // こ - さ
( 63, $3B21, $8E40 ), // さ - し
( 31, $3B60, $8E80 ),
( 94, $3C21, $8E9F ), // し
( 63, $3D21, $8F40 ),
( 31, $3D60, $8F80 ),
( 94, $3E21, $8F9F ), // し
( 63, $3F21, $9040 ), // し - す
( 31, $3F60, $9080 ),
( 94, $4021, $909F ), // す - せ
( 63, $4121, $9140 ), // せ - そ
( 31, $4160, $9180 ),
( 94, $4221, $919F ), // そ - た
( 63, $4321, $9240 ), // た - ち
( 31, $4360, $9280 ),
( 94, $4421, $929F ), // ち - て
( 63, $4521, $9340 ), // て - と
( 31, $4560, $9380 ),
( 94, $4621, $939F ), // と - に
( 63, $4721, $9440 ), // に - は
( 31, $4760, $9480 ),
( 94, $4821, $949F ), // は - ひ
( 63, $4921, $9540 ), // ひ - ふ
( 31, $4960, $9580 ),
( 94, $4A21, $959F ), // ふ - ほ
( 63, $4B21, $9640 ),
( 31, $4B60, $9680 ), // ま
( 94, $4C21, $969F ), // ま - ゆ
( 63, $4D21, $9740 ), // ゆ - よ
( 31, $4D60, $9780 ), // よ - り
( 94, $4E21, $979F ), // り - れ
( 51, $4F21, $9840 ), // れ - わ
// JIS SJIS JIS第2水準
// -- ----- ----- ----------
( 94, $5021, $989F ),
( 63, $5121, $9940 ),
( 31, $5160, $9980 ),
( 94, $5221, $999F ),
( 63, $5321, $9A40 ),
( 31, $5360, $9A80 ),
( 94, $5421, $9A9F ),
( 63, $5521, $9B40 ),
( 31, $5560, $9B80 ),
( 94, $5621, $9B9F ),
( 63, $5721, $9C40 ),
( 31, $5760, $9C80 ),
( 94, $5821, $9C9F ),
( 63, $5921, $9D40 ),
( 31, $5960, $9D80 ),
( 94, $5A21, $9D9F ),
( 63, $5B21, $9E40 ),
( 31, $5B60, $9E80 ),
( 94, $5C21, $9E9F ),
( 63, $5D21, $9F40 ),
( 31, $5D60, $9F80 ),
( 94, $5E21, $9F9F ),
( 63, $5F21, $E040 ),
( 31, $5F60, $E080 ),
( 94, $6021, $E09F ),
( 63, $6121, $E140 ),
( 31, $6160, $E180 ),
( 94, $6221, $E19F ),
( 63, $6321, $E240 ),
( 31, $6360, $E280 ),
( 94, $6421, $E29F ),
( 63, $6521, $E340 ),
( 31, $6560, $E380 ),
( 94, $6621, $E39F ),
( 63, $6721, $E440 ),
( 31, $6760, $E480 ),
( 94, $6821, $E49F ),
( 63, $6921, $E540 ),
( 31, $6960, $E580 ),
( 94, $6A21, $E59F ),
( 63, $6B21, $E640 ),
( 31, $6B60, $E680 ),
( 94, $6C21, $E69F ),
( 63, $6D21, $E740 ),
( 31, $6D60, $E780 ),
( 94, $6E21, $E79F ),
( 63, $6F21, $E840 ),
( 31, $6F60, $E880 ),
( 94, $7021, $E89F ),
( 63, $7121, $E940 ),
( 31, $7160, $E980 ),
( 94, $7221, $E99F ),
( 63, $7321, $EA40 ),
( 31, $7360, $EA80 ),
// JIS SJIS 98拡張文字
// -- ----- ----- ----------
( 63, $7921, $ED40 ),
( 31, $7960, $ED80 ),
( 94, $7A21, $ED9F ),
( 63, $7B21, $EE40 ),
( 31, $7B60, $EE80 ),
( 78, $7C21, $EE9F ),
( 14, $7C71, $EEEF )
);
function SjisToJis(
Sjis: Word
): Word;
var
ii: Integer;
begin
for ii := Low(fMATRIX) to High(fMATRIX) do begin
if (Sjis >= fMATRIX[ii, iColSJIS])
and (Sjis < fMATRIX[ii, iColSJIS]
+ fMATRIX[ii, iColRANGE]) then begin
Result := fMATRIX[ii, iColJIS]
+ (Sjis - fMATRIX[ii, iColSJIS]);
Exit;
end;
end;
Result := $0000;
end;
function JisToSjis(
Jis: Word
): Word;
var
ii: Integer;
begin
for ii := Low(fMATRIX) to High(fMATRIX) do begin
if (Jis >= fMATRIX[ii, iColJIS])
and (Jis < fMATRIX[ii, iColJIS]
+ fMATRIX[ii, iColRANGE]) then begin
Result := fMATRIX[ii, iColSJIS]
+ (Jis - fMATRIX[ii, iColJIS]);
Exit;
end;
end;
Result := $0000;
end;
タブと、変な変数名の付け方で、見づらいかと思いますが、ご容赦ください。
以前、ワープロの住所録をPCに取り込む時に書いたコードです。あまり完成され
たものではありませんが、もうすぐ、会社の仕事でこのコードを使うことになる
ので、そうなると、会社にも版権が発生することになり、ここへのアップができ
なくなるかもしれないので、今のうちに。
アイクビー
Original document by アイクビー 氏 ID:(KHB01350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|