🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

8750閲覧

Javaでの16進数⇔文字列変換において、指定ないのに、なぜASCIIで出るのか?(環境依存?)

wwwww

総合スコア41

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/06/22 07:41

■不明点

Javaで、16進数文字列を、文字列として取得するプログラムを作成しています。

この際、16進数文字列を「ASCII」で読んで文字列化する旨、指定などはしていないのですが、以下プログラムにおいては、ASCIIで文字列化が掛かっています(実際問題として本件はそれでよい話ではあるのですが、、解釈ができずモヤモヤな次第です)。

なぜ指定無くとも、(UTF-8などではなく、)「ASCII」で文字列化されるのでしょうか?
環境依存等で、気づいていないだけでどこかで設定がされているのでしょうか?(…当たれるところ見たのですが、それらしきに至らず。)

以上、何卒よろしくお願いいたします。

■関連情報

●Java バージョン :8.251
●Eclipseバージョン:4.12(Eclipse上のエンコード設定諸々は、すべてutf-8です)
●参考にしたサイト:https://www.codeflow.site/ja/article/java-convert-hex-to-ascii

■プログラム

※文字列:「あいうえお」⇔16進数:「3042304430463048304a」と、ASCII変換で紐づいています。

java

1public class test1 { 2 public static void main(String[] args) { 3 //ASCIIから16進数 4 String asciiStr="あいうえお"; 5 char[]chars = asciiStr.toCharArray(); 6 StringBuilder hex = new StringBuilder(); 7 for (char ch : chars) { 8 hex.append(Integer.toHexString((int) ch)); 9 } 10 //① 11 System.out.println(hex.toString()); 12 13 //16進数からASCII形式 14 String hexStr="3042304430463048304a"; 15 StringBuilder output = new StringBuilder(""); 16 for (int i = 0; i < hexStr.length(); i += 4) { 17 String str = hexStr.substring(i, i + 4); 18 output.append((char) Integer.parseInt(str, 16)); 19 } 20  //② 21 System.out.println(output.toString()); 22 } 23} 24
//① 3042304430463048304a //② あいうえお

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/22 08:28

何が「ASCII」だと主張したいのですか?
guest

回答2

0

UTF8でも、英数字はASCIIと同じコードになってますんで、そういうことですね

投稿2020/06/22 07:45

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下プログラムにおいては、ASCIIで文字列化が掛かっています

いません。日本語仮名はASCIIにありませんし、JavaのStringで扱われるエンコーディングはすべてUTF-16です。

Stringは、補助文字をサロゲート・ペアで表現するUTF-16形式の文字列を表します(Javaリファレンスより、強調は引用者)。

投稿2020/06/22 08:28

編集2020/06/22 08:36
maisumakun

総合スコア145963

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/22 08:37

「あ」はUnicodeで表して0x3042です。
wwwww

2020/07/02 04:41

ありがとうございます。 よくよく学習の上、理解しました(そういうものである旨※)。 ※JavaのString(上記例での"あいうえお")で扱われるエンコーディングはすべてUTF-16 で、 (それと対応している)ASCII形式で表すと"3042304430463048304a"になる 1週前の私はASCiiとUTF8(UTF16)を並列的解釈をしておりました、恥ずかしながら。 ご回答いただいた方々、お手数おかけし失礼いたしました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問