なんで、

String str = "あいうえお";
byte[] temp = str.getBytes("8859_1");
String str2 = new String(temp, "8859_1");
System.out.println(str2);

このコードが ????? を出力するかわかる方、おしえてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Harry_ さんの回答履歴を見る限り、あなたはこの質問の答えがわかっていて当然だと思うのですが……




8859_1 は、欧文用のエンコードですよね。半角英数字などの欧文用文字には対応していますが、日本語のひらがなや漢字には対応していません。ですから、日本語を 8859_1 エンコードで表そうとしても不可能です。

したがって、コードの2行目で getBytes メソッドの返すバイト配列は、この時点で
0x3f 0x3f 0x3f 0x3f 0x3f (?????)
になっています。

もちろん、3行目の 8859_1 エンコードによるバイト配列から Unicode の文字列に変換する作業はうまくいっています。ただし、引数のバイト配列の中身は、「?????」なのです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
8859-1エンコードには日本語文字も含まれていると
ずっと勘違いしていました。


>Propertiesクラスのloadメソッドは、ストリームをISO8859_1として
>読み込みます。この中で、バイト配列→Stringオブジェクトの誤った
>変換がなされているので、

回答履歴というのは、このことだと思います。
非常にはずかしい話ですが、8859-1が日本語を表すことができない、
という意味ではなく、単にMS932と異なるエンコードだから
誤変換している、というつもりで回答しておりました。
これに続いて書いた、ちゃんと動かないコードから私の勘違いが
見てとれると思います。
最近になって、そのコードがうまく動作しないことに気づき、
今回の質問をさせてもらうことにしました。
確認もしないで回答したことは、深く反省しています。

ありがとうございました。

お礼日時:2002/03/24 03:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

QString str = "a\\b\\c";

String str = "a\\b\\c";

という文字列があった時に、a,b,cで分割したいのですが、どのようにsplitさせれば出来るでしょうか?

Aベストアンサー

str.split("\\\\")
円マークを4つよ。

QString str = (String)url

classファイルでのアプレットで、自分のパスを編集しようと思っています。
自分のパスをgetCodeBase()で得て、文字列として認識させたいのだけど
それができていません。

String str;
str = getCodeBase().toString;

コンパイルエラー
シンボル: 変数 toString
位置 : java.net.URL の クラス
strBuf = getCodeBase().toString;

getCodeBase()はStringでなく、URL型を返すみたいです。
これを文字列のように編集したいからSrting型にしたいんだけど
どうすればいいんですか?

Aベストアンサー

もとのソースに()を付けるだけでOK。

String str=getCodeBase().toString();

便乗ですけど、先程の投稿の。。。

Event.ACTIONEVENT

は書き間違いです。

Event.ACTION_EVENT

が正しいので訂正させてもらいます。

QString(byte[] bytes, int offset, int length)の文字コードは?

String(byte[] bytes, int offset, int length)は、バイト配列(8bitずつのまとまり)を、文字列型に直す、というものだと思うのですが文字コードは何にしたがって直すのでしょうか?

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html

Aベストアンサー

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいから移植性も高まると考えるため)

どうしてもデフォルトがほしけりゃ
http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html#defaultCharset%28%29
があるわけですし

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいか...続きを読む

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど


人気Q&Aランキング

おすすめ情報