2011-01-17 29 views
5

私はいくつかの特殊文字がシステムのデフォルトエンコーディングのデータベース(sybase)に格納されていて、このデータをフェッチして、サードパーティにUTF-8エンコーディングで送信する必要があります。 Javaプログラム。Java UTF8エンコーディング

第三者に送信されるデータが定義済みの最大サイズを超えてはならないという前提があります。 UTF-8に変換すると文字が2文字または3文字に置き換えられることがあるので、データベースからデータを取得した後、UTF-8文字列にエンコードしてから文字列を分割する必要があります。

中国語やギリシャ語の文字や特殊文字> ASCII 256などの特殊文字がある場合、それをUTF-8に変換すると1文字が1バイト以上で表されることがあります。

どのように変換が適切であることを確認できますか?変換のために私は次のよう

// storing the data from database into string 
string s = getdata from the database; 

// converting all the data in byte array utf8 encoding 
byte [] b = s.getBytes("UTF-8"); 

// creating a new string as my split logic is based on the string format 

String newString = new String(b,"UTF-8"); 

を使用しています。しかし、私は特殊文字?を得るとき、私は、出力コンソールにこのNEWSTRINGを。

だから私はいくつかの疑問があります。私の変換ロジックが間違っている場合、どのように私はそれを修正することができ、

  • を。
  • UTF-8に変換した後、変換が正常かどうかを再確認できますか?私はそれが第三者に送られる必要がある正しいメッセージであることを意味します。私は、メッセージが変換後にユーザーが判読できない場合は、変換に何らかの問題があると仮定します。

そこにいるすべての専門家の視点がありますか。

さらに詳しい情報が必要な場合は教えてください。

+3

問題であると思われることあなたのコンソールではなく、私が言うことができる限り、変換は大丈夫です。あなたはそれをコンソールの代わりにテキストファイルに書き出し、テキストエディタでそれを開いてみましたか? – biziclop

+1

元の文字列を出力しようとしましたか?あなたのコンソールで使用されているフォントには、これらの文字が含まれていない可能性があります。 – josefx

+0

ユニコードからutf-8に変換して文字を正しく表示する作業は問題ありません。昨年、連絡先が解決策を見つけました。私は彼がどのようにこの作業をすることができたかを彼に尋ねます。 –

答えて

0

Java文字列はUnicodeですが、すべてのJavaコンポーネントが完全なUnicode文字列、特にAWTコンポーネントと軽量スイングコンポーネントをサポートするわけではありません。だから、あなたは完全に良い文字列を持っているかもしれませんが、あなたのコンソール出力で迷惑メールを取得します。すべての返信用

0

感謝..

あなたのいくつかによって示唆されるように、私はすでにまた、私が得たテキストファイルにただし、テキストファイルに書き込むしようとしましたか?私の特殊文字のために。だから私は、以下の観察を持っている: -

a)のuはバイトレベルで別のエンコーディングに1つのエンコーディングからの文字列を変更FRSTエンコーディングは、2倍のプロセスであり、そしてuはまた、新しい文字セットの必要なフォントを持っている必要があります。

b)現在のシナリオでバイトをエンコードしていることを意味する文字列をエンコードする場合は、MSワードの二重引用符を使用してsybaseデータベースに挿入し、dbからデータを取得した後私はtxtファイルに書き込んでいますが、どこが同じですか?二重引用符の場合は、しかし、私は直接データベースからMSの単語に同じものをコピーするか、または編集実際に文字を見ることができます。だから私はこの問題を理解することができません。私の理解によれば、私たちはエンコーディングの間に、実際の表現であるバイト値だけを考慮する必要があります。私たちがこれらのバイト配列から構成する文字列オブジェクトではありません。しかし、私のコード化された情報が人間が読めるものでなければ、それを読んで(私はこれらのバイトを読み込むだろうと推測していますが、特殊文字の場合はいくつか?utf8エンコーディング中に導入されたような迷惑メールのようなものは、情報損失ではありません)。

あなたの意見を本当にうれしく思っています。正しいアプローチをさらに進めるべきですか?

+1

?テキストを表示するために使用しているプログラムも不幸であることだけを伝えます。あなたがビットを見るまで、本当に何が起こっているのかを知ることはできません。いくつかのサンプルテキストを表示するには、ヘキサダンプツールを使用します。 – ddyer

2

あなたは、Unicodeをテキストファイルに書き込んでいますが、Unicodeから変換する必要があります。

しかし、何に変換?それはファイルをどのように開くかによって異なります。

たとえば、System.out.println(myUnicodeString)は、Unicodeを、System.outが構築されたエンコードに変換します。おそらくプラットフォームのデフォルトのエンコーディングです。 Windowsを実行している場合、これはwindows-1252になる可能性があります。

あなたはそれをファイルに書き込むときにUTF-8エンコーディングを使用するには、Javaを伝える場合は、UTF-8が含まれているファイルを取得します:

PrintWriter pw = new PrintWriter(new FileOutputStream("filename.txt"), "UTF-8"); 
pw.println(myUnicodeString); 
0

かどうかを確認するために進エディタを使用してくださいあなたの出力は正しい形式のUTF8です。あなたが見ているものが矯正者ではないかどうかを確かめる方法は他にありません。

そして、あなたの準備ができていない場合は、これを読んで:http://www.joelonsoftware.com/articles/Unicode.html

0

は、適切converstionのためにこれを使用する - この1つはISO-8859-1からUTF-8にある:

public String to_utf8(String fieldvalue) throws UnsupportedEncodingException{ 

     String fieldvalue_utf8 = new String(fieldvalue.getBytes("ISO-8859-1"), "UTF-8"); 
     return fieldvalue_utf8; 
} 
関連する問題