Lunatic Sol

IT Tips

10進/16進 HTML Unicode にエンコード

2004-06-01 12:40:00 | Java
最近 LotusScript ネタがあまりなくて書いていませんでしたが、Java の勉強もしなくてはいけないのでせっかくなのでひとつ書いてみました。HTML Unicode を返すスタティックメソッドを含んだ SxString クラスです。まだ Java は修行中の身なのでエラー処理とか、また Unicode に変換させる必要のない文字も対象にしてしまっていたり、いろいろ気になる点はあるかもしれませんが、まぁそこはご愛嬌。10進数と16進数の HTML Unicode を返すクラスファイルがあるだけでも便利でしょ。

使い方は簡単。SxString.java をコンパイルした SxString.class ファイルを準備し、自分のクラスファイルの中で以下のような構文で呼び出してあげれば String クラス型の値を戻します。

String uHtml = SxString.toUnicodeHTMLHex(str);
toUnicodeHTMLDec(String s) と toUnicodeHTMLHex(String s) という二つの public static method があります。前者は10進数 HTML Unicode を返して、後者は16進数で返します。当初 toUnicodeHTML(String s, int radix) を public にしていましたが、2つめの radix のエラー処理を含めるよりはラッパーを作ってしまった方が間違えないなということで toUnicodeHTML() は private にして Wrapper を public にするように形を変えてみました。
public class SxString {
    public static String toUnicodeHTMLDec(String s) {
        return toUnicodeHTML(s, 10);
    }
    
    public static String toUnicodeHTMLHex(String s) {
        return toUnicodeHTML(s, 16);
    }
    
    private static String toUnicodeHTML(String s, int radix){
        StringBuffer sb = new StringBuffer("");
        char ch[] = s.toCharArray();
        for(int i=0; i<ch.length; i++) {
            if (Character.getNumericValue(ch[i]) >= 1) {
                sb.append(ch[i]);
            } else if (Character.isWhitespace(ch[i])) {
                sb.append(ch[i]);
            } else {
                sb.append("&#");
                if (radix == 16) sb.append("x");
                sb.append(Integer.toString(ch[i],radix) + ";");
            }
        }
        return sb.toString();
    }
}

最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
Unknown (liris)
2004-08-30 12:33:33
> Unicode に変換させる必要のない文字も対象にしてしまっていたり



CharactorクラスのisUnicodeIdentifierStart, isUnicodeIdentifierPart, isIdentifierIgnorable のようなAPIでUnicode判定をするか、JDK1.4以降ならCharacter.UnicodeBlockで文字のコードブロックを取得して場合分けをして、エスケープ対象の文字だけ変換する、というのはどうでしょうか?
返信する