1

「import javax.xml.bind.Marshaller」を使用して Java オブジェクトから xml に変換したいオブジェクト階層があります。Java クラス ファイルが "Cp1252" にエンコードされており、これを変更できません。

プロパティを「München」などに設定してxmlに変換すると、結果はM?nchenになるため、エンコーディングに問題があります:-)

私のJavaクラスファイルの作成では、getCity中の値は問題ないように見えるので、すべて問題ないようです。XMLDirectMapping.setAttributeValueInObject によって呼び出される setCity-Method では、vity 値は既に壊れています: "Mnchen"。

プロパティ Marshaller.JAXB_ENCODING で設定するためにいくつかの異なる値を試しましたが、これは出力エンコーディングであるため、これが機能しません。

私の仮定では、エラーは私の vm のデフォルトのエンコーディングまたはライブラリのエンコーディングと関係があるはずです。しかし、私にはまったくわからないので、あなたの誰かが以前にこの問題を抱えていたら素晴らしいと思います.

それを解決するためにさらに情報が必要な場合はお知らせください。このような問題のためだけに半日以上を費やさないことは本当に素晴らしいことです.

ありがとう

4

2 に答える 2

1

コードがなければ、たとえ正しく実装されたとしても、小さな間違いの可能性を判断するのは困難です。

最初に、エンコーディングとして UTF-8 を使用することをお勧めします。UTF-8 の方がより標準的であり、間違っていなければクロスプラットフォームでも使用できるためですが、これがデフォルトです。

次に、生成されたファイルの xml タグに、そのエンコーディングでエンコードされていることが実際に含まれているかどうかを確認します。

3 番目に、システム プロパティ jaxb.encoding を使用してエンコーディングを変更できます。

Marshaller.JAXB_ENCODING ではなく -Djaxb.encoding=Cp1252 でアプリを起動してください!

于 2013-09-16T07:47:28.307 に答える
1

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-22)エキスパート グループのメンバーです。

私のJavaクラスファイルの作成では、getCity中の値は問題ないように見えるので、すべて問題ないようです。XMLDirectMapping.setAttributeValueInObject によって呼び出される setCity-Method では、vity 値は既に壊れています: "Mnchen"。

このステートメントに基づいて、JAXB (JSR-222) の EclipseLink MOXy 実装を使用していると言えます。


値が正しくエンコードされていないことをどこで確認できますか? エディター/デバッガーで値が正しくエンコードされていないように見えることがありますが、実際には正しい値です。結果をファイルにマーシャリングすると、正しい結果が得られますか?

于 2013-09-16T19:56:33.890 に答える