JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 「~」とは

「~」

日本語 から、にょろ、波ダッシュ
英語 WAVE DASH、FULLWIDTH TILDE
ふりがな から、にょろ、なみだっしゅ
フリガナ カラ、ニョロ、ナミダッシュ

解説

「○○から△△」という意味の全角文字
「1~10」といった使用方法をする。
 
シフトJISCP932の違いにより、文字化けの原因となる場合がある。
~」の全角文字が「~」なのか、ということが根本にあり、シフトJISからUnicodeに変換した場合の0x301Cは「WAVE DASH」、CP932からUnicodeに変換した場合の0xFF5Eは「FULLWIDTH TILDE」という名称が付けられている。
このふたつは別の文字であり、後者の方が「~」に近く、前者は「~」を上下逆にしたものである。この変換の解釈の違いがこの問題の元である。「似たような文字だからどっちでもいいじゃん」という気もするが、文字化けバグの原因となる非常に大きな問題である。
詳しくは「CP932」の項目を参考のこと。
 
上記の英語名称から、この問題を「WAVE DASH - FULLWIDTH TILDE問題」、「WAVE DASH問題」、「FULLWIDTH TILDE問題」と言うこともある。
 
対策のひとつとして、「~」に置き換えてしまうという方法もある。
YahooやAmazonはそうしている。
「-」に置き換えると意味がないので注意。

参考サイト


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

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

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

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // 「~」(0x81,0x60)の場合。
            byte[] bytes = new byte[] { (byte)0x81, (byte)0x60 };
            // シフトJISとして変換すると、文字化けしてしまいます。
            String shiftJis = new String( bytes, "Shift_JIS" );
            System.out.println( shiftJis );
            System.out.println( Integer.toHexString( shiftJis.charAt( 0 ) ) );
            // ?
            // 301c

            // CP932(IANAに登録している名前は"Windows-31J")なら変換できます。
            String windows31J = new String( bytes, "Windows-31J" );
            System.out.println( windows31J );
            System.out.println( Integer.toHexString( windows31J.charAt( 0 ) ) );
            // ~
            // ff5e
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「Shift_JIS」や「Windows-31J」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}
// Sample.java
import java.io.UnsupportedEncodingException;

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // 「~」(0x81,0x60)の場合。
            byte[] bytes = new byte[] { (byte)0x81, (byte)0x60 };
            // シフトJISとして変換すると、文字化けしてしまいます。
            String shiftJis = new String( bytes, "Shift_JIS" );
            System.out.println( shiftJis );
            System.out.println( Integer.toHexString( shiftJis.charAt( 0 ) ) );
            // ?
            // 301c

            // CP932(IANAに登録している名前は"Windows-31J")なら変換できます。
            String windows31J = new String( bytes, "Windows-31J" );
            System.out.println( windows31J );
            System.out.println( Integer.toHexString( windows31J.charAt( 0 ) ) );
            // ~
            // ff5e
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「Shift_JIS」や「Windows-31J」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}

この単語を含むページ

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

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

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