2011-10-26 13 views
1

私はアンドロイドデバイス用のアプリケーションを開発しており、最近開発中に問題がありました。特殊文字は疑問符 - ハッシュとして表示されます

オンラインのhtmlファイルから情報を取得する必要がありました。そのため、実際にファイルをスキャンして情報を得るために、InputStreamとBufferedReaderの構成を作成しました。私は実際に私の情報を得るために私の文字列を分割し、トーストでそれを表示しようとしました。

すべてうまく動作しますが、私はそれが欲しい方法ですが、毎回特殊文字を表示する必要があります。疑問符 - ハッシュがあります。

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> 

私はこの権利を取得する方法:

私はウェブサイトがで言うので、それは、文字セットの問題かもしれないと思いますか?

EDITは: - それは、プラットフォームのデフォルトを使用しようとするでしょう

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost post = new HttpPost(url); 
((AbstractHttpClient) httpClient).getCredentialsProvider().setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials("user","password")); 
HttpResponse response; 
response = httpClient.execute(post); 
BufferedReader reader = new BufferedReader(
    new InputStreamReader(
     response.getEntity().getContent() 
    ) 
); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    Toast.makeText(this, line, Toast.LENGTH_LONG).show(); 
} 
+1

投稿するストリームから読んでから始まり、トーストを表示することで終了します –

答えて

1

InputStreamReaderは実際に、私は推測、それを読むために起こっているストリームの文字エンコーディングを示すために、2番目のパラメータとしてCharsetがかかる場合があります。標準準拠のJava実装がwindows-1252エンコーディングに対応するために必要とされていませんしかし、私はそれが動作するかどうかを確認する最初の回避策として試すことができるISO-8859-1と非常に似ていると信じています。 n InputStreamReaderクラスのCharsetDecoderを2番目のパラメータ(Charset.newDecoderを呼び出して作成できます)を取得します。これは、希望するエンコーディング、またはおそらくシステムのデフォルトエンコーディングでストリームをデコードしようとする可能性があります。 Charset.defaultCharsetを呼び出してください。

詳細については、InputStreamReaderCharsetおよびCharsetDecoderのJavaDoc APIドキュメントを参照してください。確かに私は専門家ではなく、エンコーディングとその問題についてちょっと知っていますが、これらのクラスの可用性を指摘する価値はあると思いました。

InputStreamReaderのエンコーディングを確認するには、getEncodingメソッドを呼び出すこともできます。

+0

ありがとう!最初の推測は全く正しかった。私はInputStreamReaderに "ISO-8859-1"文字セットを追加しました! – user1014917

0

私の推測では、あなただけのストリームではなく、文字エンコーディングを取るInputStreamReaderコンストラクタを使用していたということです。応答で指定されたエンコーディングを使用する必要があります。 HTTPを使用している場合、Content-Typeヘッダーの内容はとなります。は大丈夫ですが、HTMLで別途指定できるというのは残念です。(

AndroidにWindows-1252エンコーディングが含まれているかどうかは、別の問題...

+0

@Downvoter:気軽にコメントできますか? –

+0

私はそれほど一般的にはHTTPには程遠いです。これはこれまでにインターネットアクセス権を使用した私の最初のアプリケーションです。 – user1014917

0

ああ、この問題が他のところで解決されるかどうかに関係なく、utf-8を使用してください。他の誰かが私が持っていた同じ問題を抱えているだけの場合には http://www.w3.org/TR/html4/charset.html http://en.wikipedia.org/wiki/UTF-8

0

...

私は同じ疑問符-IN-を得ていましたa-black-diamond私はres/rawからロードしたJSONファイルから引っ張ってきました。どのような種類のストリーム読み込みの組み合わせを試しても、文字は引き続き表示されます。私がUTF-8を使用しているかどうかを確認する私の最初の試みは、Eclipse経由でファイルのプロパティをチェックすることでしたが、それが何であれ「MacRoman」に設定されていたことは間違いありません。私はそれをUTF-8に変更し、ビルドし、実行し、失敗し、きれいにし、ビルドし、実行し、失敗し、頭を傷つけ、SOに戻った。

私は、エンコードを変更した後にファイルを保存しなければならなかったので、これを試したが、まだ運がないことを読んだ。私は最終的にEclipseエディタのJSONファイルを使って特殊文字の位置にスクロールし、興味深いことに特殊文字(éとemdash)も黒い菱形で表示されました。私はそれらを削除して再入力し、すべて正常に動作しました。

ボトムライン:エンコーディングが重要です。リソースファイル(XML、JSON、CSVなど)を作成するときは、テキストの入力を開始する前に適切なエンコーディング(通常はUTF-8)を選択してください。

関連する問題