JavaA2Z

KAB-studio > プログラミング > JavaA2Z > シフトJISとは

シフトJIS

日本語 横移動ジス
英語 shift jis
ふりがな しふとじす
フリガナ シフトジス

解説

Windows文字コード
Windows系のテキストファイルで使用される文字コード。「SJIS」とも言われる。
ただし、後述するがこれは正しくなく、正確には「CP932」が正しい文字コードである。
しかし、一般的には「Windows文字コード」は「シフトJIS」ということになっている。
 
日本語用文字コード
1バイトもしくは2バイトを使用して1文字を表現する。
半角英数字ASCIIをそのまま使用し、この場合は1バイトである。
ASCIIの拡張部分、つまり0x80~8xFFまでには、半角カタカナや記号が含まれており、これも1バイトである。
ひらがな、カタカナ、漢字は1バイト2つを使用する。
2つのうち、1バイト目を「リードバイト」、2バイト目を「トレイルバイト」と呼ぶ。
リードバイト0x81~0x9F及び0xE0~0xFC、トレイルバイト0x40~0x7E及び0x80~0xFCの範囲の値となっている。ただし、トレイルバイトはリードバイト及びASCIIと重複するため注意が必要。
 
恐らく日本で一番使われている文字コード
日本に存在する「日本語のテキストファイル」の過半数がシフトJISで書かれていると思われる。
それだけメジャーな文字コードだが、問題も多い。
ASCIIとトレイルバイトの範囲が重なっており、特に、Windowsでのパスの区切り文字に使用されている「\」の文字コード0x5Cがトレイルバイトの中に含まれているため、特別な処理をしないとファイルパスの分割に失敗する。
ASCIIの拡張部分に半角カタカナが使用されているが、過去には半角カタカナは普通に使用されていたため、過去のテキストファイルの扱いに困ることが多い。実際には問題になることは少ないが、全体の傾向として使用しない方向にある。
後述する「正しい文字コード」の問題もある。
 
1文字バイト数がそれぞれ異なり、リードバイトやトレイルバイトの判別が難しいこともあり、直接操作はするのは難しいため、プログラムで処理する場合にはStringクラスに格納してからうのがいいだろう。
シフトJISのIANAでの登録名は"Shift_JIS"であり、Stringクラスコンストラクタで渡す場合やgetBytes()メソッドに渡す場合には"Shift_JIS"を使用する。
 
JIS」と名前が付いているが、JIS規格には含まれておらず、文字コードとしての「JIS」とも体系が大きく違うため、別物と考えておいた方がいいだろう。
 
Windowsの正しい文字コードは、「シフトJIS」ではなく「CP932」である。
「シフトJIS」と「CP932」では、文字の「変換表」が一部異なる。「~」「-」といった一部の文字Unicodeに変換した場合、異なる文字コードへと変換される。
そのため、Javaプログラム上で使用する場合、シフトJISではなくCP932を指定することを強く勧める。
ただし、ライブラリの中で固定で使用されている場合もあり、その場合には「~」「-」といった文字を「一時的に他の文字に置き換える」といった処理が必要な場合もあるため注意。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.UnsupportedEncodingException;

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // 文字コード「シフトJIS」(IANAに登録している名前は"Shift_JIS")
            // での「あいう」をStringクラスに渡します。
            byte[] source = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
            // 文字コードの変換はStringクラスのコンストラクタで行います。
            // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
            // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
            // そうするとUnicodeに変換されて格納されます。
            String string = new String( source, "Shift_JIS" );
            System.out.println( string );
            // あいう
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「Shift_JIS」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}
// Sample.java
import java.io.UnsupportedEncodingException;

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // 文字コード「シフトJIS」(IANAに登録している名前は"Shift_JIS")
            // での「あいう」をStringクラスに渡します。
            byte[] source = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
            // 文字コードの変換はStringクラスのコンストラクタで行います。
            // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
            // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
            // そうするとUnicodeに変換されて格納されます。
            String string = new String( source, "Shift_JIS" );
            System.out.println( string );
            // あいう
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「Shift_JIS」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/08/19
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。