2017-05-21 17 views
0

Linux(Ubuntu)のJavaで、JDBC接続を介して古いCobolバイナリデータファイルからデータを読み込んでいます。スウェーデンの文字å、ä、ö、Å、ÄとÖは4文字の小さなボックスとして出てきます。ここに例があります。Javaの特殊文字の置換

enter image description here

彼らは実際には、コンソールで ``空のボックスとして出てくるプログラムを実行しています。私はテキストエディタに出力を貼り付けてコピーすると、テキストが入ったボックスが表示されます。私はこれらの文字がISO/IEC 8859-15でコード化されていると思いますが、わかりません。私は文字を置き換えるのが好きで、私がmyOutptString.replace("", "Ä");をやろうと思っていたら、他の文字についても同じことをします。問題は、replace関数に空のボックスをtargetと置くことができないことです。 targetにはどうすればよいですか?おそらく、このためにreplace関数を使用することはできません。

+5

正しいエンコーディングでファイルを読む必要があります。 – SLaks

+0

文字/文字列を置き換えるとき、それ以外の方法はありませんか? 'myOutputString.replace("Ä "、" a ");'と同様です。 'Ä'はもはや'Ä'として読み込まれない限り 'a'に置き換えられます。 – steven

+0

@SLaks。私はエンコーディングを設定しようとしましたが、 'ISO-8859-15'ではないようです。とにかく私は交換をすることができますか? – g3blv

答えて

0

情報をバイトとして読み取ってから、UTF-8エンコーディングを使用してStringを構築してみてください。あなたの問題は、あなたのデフォルトのエンコーディングがあなたの情報のエンコーディングと異なる可能性が最も高いです。そのため、あなたのコードjavaでは、デフォルトのエンコーディングに従ってバイトを解釈しようとしますが、失敗します。だから、あなただけのバイトを読み込む場合は、この方法でそれを読むために試行しbyte[] bufに言うと:

new BufferedReader(new InputStreamReader(new ByteArrayInputStream(buf), "UTF-8")); 

それが役立つかもしれません。最終的には、データソースのエンコーディングを把握する必要があります。

+0

エンコードの内容がわかりません。今ではコンソールからエディタに "boxes"をコピーしてコードとして出てきましたが、この例では '\ u0086'のように見えます。これを普通の文字に置き換えることができます。 – g3blv

+0

これはユニコードです。 UTF-8として読むことができます。また、Unicodeを文字列に変換し、その逆の変換を行うツールを使用する場合は、オープンソースライブラリ「スタックトレースフィルタリング、サイレント文字解析のUnicodeコンバータとバージョンの比較」を使用したオープンソースJavaライブラリを使用できます。 「文字列Unicodeコンバータ」の段落を参照してください。ここでは、ライブラリのユーティリティとそのライブラリの使い方について詳しく説明している記事へのリンクがあります:https://www.linkedin.com/pulse/open-source-java-library-some-useful-utilities-マイケルガントマン –

関連する問題