UTF-8の商標記号をISO Latin 1に変換し、ISO Latin 1でエンコードされたデータベースに保存する必要があります。UTF-8文字をISO Latin 1に変換する方法は?
どうすればjavaで行うことができますか?
私は
String s2 = new String(s1.getBytes("ISO-8859-1"), "utf-8");
のようなものを試してみたが、私が期待通りに動作しないようです。
UTF-8の商標記号をISO Latin 1に変換し、ISO Latin 1でエンコードされたデータベースに保存する必要があります。UTF-8文字をISO Latin 1に変換する方法は?
どうすればjavaで行うことができますか?
私は
String s2 = new String(s1.getBytes("ISO-8859-1"), "utf-8");
のようなものを試してみたが、私が期待通りに動作しないようです。
Javaの文字列は、常にUnicode(UTF-16、効果的)です。変換は、テキストからバイナリエンコーディングに移動しようとする場合、またはその逆の場合にのみ必要です。
文字は何ですか?あなたはISO Latin 1にも存在していると確信していますか?そうであれば、私はそのキャラクターがあなたのデータベースに何の問題もなく保存されることを期待しています。 「UTF-8商標記号」はありません。あなたは "UTF-8の商標記号を表すバイト"を持つことができますが、これは文字列ではなくバイト配列になります。
編集:Unicode trademark character U + 2122を意味する場合は、ISO-Latin-1の範囲外です。 (IIRC、外観や法的な意味でのいずれか)と同じものではありませんが、何もないよりはましかもしれregistered trademark character U + 00AEは、あります - あなたはそれを使用したい場合だけ使用します。
string replaced = original.replace('\u2122', '\u00ae');
しかし、<®>と<™>の意味は全く異なります。 –
したがって、「同じものではありません(外観または法的意味のいずれか」 –
私は同様の問題を抱えており、エンティティの変換不可能な文字を変換することで解決しました。 情報を後でhtmlとして表示すると、とにかく問題ありません。
そうでない場合は、それらをユニコードに変換しようとする可能性があります。 「商標」とのpythonで
例:
s = u'yellow bananas\u2122'.encode('latin1', 'xmlcharrefreplace')
# s is 'yellow bananas™'
私の知る限り、あなただけのISO-をサポートしてDBに非Latin-1の文字が含まれている(s1
から)文字を格納しようとしている理解して8859-1。
まず、私はそれが汚いアイデアだと言うことに同意します。 CP1252はISO-8859-1(文字あたり1バイト)から近く、あなたの質問をanwserし、今
String s2 = new String(s1.getBytes("UTF-8"), "ISO-8859-1");
この方法では、s2
は一度ISO-8859-1でエンコードされた、ということcharacher文字列で、有効なUTF-8のように見えるかもしれバイト配列を返します。バイト。元の文字列を取得するに
、あなたは
String s1 = new String(s2.getBytes("ISO-8859-1"),"UTF-8");
を行うしかし、待ってます!この場合、希望は、ISO-8859-1 .. で任意のバイトをデコードでき、DBはそのようなデータを受け入れることを願っています。
実際には、正式には、ISO-8859-1 doesn't have chars for any byte valuesのため実際には分かりません。 たとえば、80〜9Fです。
そして、
byte[] b = { -97, -100, -128 };
System.out.println(new String(b,"ISO-8859-1"));
しかし、ジャワ、s.getBytes("ISO-8859-1")
でが実際に初期のアレイを復元???
を表示するであろう。
偉大な答えは、文字セットの理解が優れています – paj28
http://stackoverflow.com/questions/285228/how-to-convert-utf-8-to-us-ascii-in-java 正確には重複していませんが、類似しています。 –