web-dev-qa-db-ja.com

Unicode文字のコードを取得するにはどうすればよいですか?

私がこれを持っているとしましょう:

char registered = '®';

またはumlaut、または任意のUnicode文字。コードを取得するにはどうすればよいですか?

61
Geo

それをintに変換するだけです:

_char registered = '®';
int code = (int) registered;
_

実際、charからintへの暗黙的な変換があるため、上記のように明示的に指定する必要はありませんが、この場合は、あなたがやろうとしている。

これにより、UTF-16コード単位が得られます。これは、Basic Multilingual Planeで定義された文字のUnicodeコードポイントと同じです。 (そして、BMP文字のみがJavaでchar値として表現できます。)Andrzej Doyleの答えにあるように、任意の文字列からUnicodeコードポイントが必要な場合は、Character.codePointAt()

UTF-16コードユニットまたはUnicodeコードポイントを取得した後、そのうち整数である場合、それをどのように処理するかはユーザー次第です。文字列表現が必要な場合は、希望する表現のkindを正確に決定する必要があります。 (たとえば、値が常にBMPにあることがわかっている場合は、スペースに_U+_など、_"U+0020"_を先頭に付けた4桁の固定16進表現が必要になる場合があります。ただし、要件が何であるかわからないので、質問してください。

103
Jon Skeet

より完全ではありますが、より冗長ですが、これを行う方法は、 Character.codePointAt メソッドを使用することです。これは「高サロゲート」文字を処理します。これは、charが表現できる範囲内の単一の整数では表現できません。

あなたがこれを与えた例では厳密に必要ではありません-(Unicode)文字が単一の(Java)charregisteredローカル変数など)内に収まる場合、それは落ちなければなりません以内 \u0000から\uffff範囲、およびサロゲートペアについて心配する必要はありません。ただし、String/char配列内から潜在的に高いコードポイントを見る場合は、Edgeのケースをカバーするためにこのメソッドを呼び出すのが賢明です。

たとえば、代わりに

String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;

つかいます

String input = ...;
int codePoint = Character.codePointAt(input, 4);

この場合、これはコードがわずかに少ないだけでなく、サロゲートペアの検出を処理します。

33
Andrzej Doyle

Javaでは、charは技術的には「16ビット整数」であるため、単純にintにキャストするだけでコードを取得できます。 Oracle から:

Charデータ型は、単一の16ビットUnicode文字です。最小値は「\ u0000」(または0)、最大値は「\ uffff」(または65,535を含む)です。

したがって、単純にintにキャストできます。

char registered = '®';
System.out.println(String.format("This is an int-code: %d", (int) registered));
System.out.println(String.format("And this is an hexa code: %x", (int) registered));
7
Felype

私にとっては、「Integer.toHexString(registered)」のみが私が望んでいた方法で機能しました:

char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));

この答えは、テーブルに通常表示される文字列表現のみを提供します。 Jon Skeetの答えはさらに説明しています。

0

親愛なる友人、ジョン・スキートは、あなたは文字の10進コードを見つけることができると言いましたが、ユニコードで言及されるべき文字の16進コードではないので、DeciamlではなくHexCodeで文字コードを表現する必要があります。

http://unicode.codeplex.com には、文字または文に関する完全な情報を提供するオープンソースツールがあります。

したがって、パラメーターとしてcharを指定し、ストリングとしてahexCodeを返すパーサーを作成することをお勧めします

public static String GetHexCode(char character)
    {
        return String.format("{0:X4}", GetDecimal(character));
    }//end

それが役立つことを願って

0
Nasser Hadjloo

ユーティリティクラスStringUnicodeEncoderDecoderを持つオープンソースライブラリMgntUtilsがあります。このクラスは、文字列をUnicodeシーケンスに変換する静的メソッドを提供します。非常にシンプルで便利です。文字列を変換するには、次のようにします。

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

たとえば、文字列「Hello World」は次のように変換されます

「\ u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064」

どの言語でも動作します。ライブラリに関するすべての詳細を説明する記事へのリンクは次のとおりです。 MgntUtils 。サブタイトル「String Unicode converter」を探します。この記事では、アーティファクトを取得できるMaven Centralと、プロジェクト自体を取得できるgithubにリンクしています。このライブラリには、よく書かれたjavadocとソースコードが付属しています。

0
Michael Gantman