2017-09-13 8 views
2

は、私は次のコードでObjectDBデータベースにいくつかのUTF-8文字列を保存しようとしている:ObjectDB JPAデータベースにUTF-8文字列を保存するにはどうすればよいですか?

ResourceBundle entries = Utf8ClassLoader.getBundle("localization/language", "fa-IR"); // fa-IR is a UTF-8 and RTL language 
Enumeration<String> keys = entries.getKeys(); 
for (String key = keys.nextElement(); keys.hasMoreElements(); key = keys.nextElement()) { 
    ResourceEntity entity = new ResourceEntity(); 
    entity.setId(new ResourceEntity.PKC(key, locale)); 
    entity.setValue(entries.getObject(key)); 
    resourceDAO.persistOrUpdate(entity); 
} 

モデル:

@Entity 
public class ResourceEntity { 
    @EmbeddedId 
    private PKC id; 

    private Object value; 

    // Getters and setters omitted 

    @Embeddable 
    public static class PKC { 
     String key; 
     String locale; 

     public PKC() {} 

     public PKC(String key, String locale) { 
      this.key = key; 
      this.locale = locale; 
     } 

     // Getters and setters omitted 
    } 
} 

局在は/ language_fa_IR.propertiesが存在し、正常に開きます。

DAOのpersistOrUpdateメソッドは、トランザクション内のEntityManager.persist関数にすぎません。

を(キーが存在する場合とEntityManager.mergeはありません)しかし、私はObjectDBViewerを開いたとき、私はこれを参照してください。Screenshot

がどのように私は文字を変更せずに文字列を保存することができますか?

答えて

1

実際にObjectDBに問題はなく、ResourceBundleはUTF以外の文字列を返していました。私はこのラインでそれを解決:

entity.setValue(new String(entries.getString(key).getBytes("ISO-8859-1"), "UTF-8"));

1

ObjectDBあなたがそれらを保存するように、オブジェクトデータベースは、単に、文字列フィールドを含むその内容を持つオブジェクトを検索して、と。したがって、通常、エンコーディングはObjectDBの使用には関係ありません。これはメモリ内の文字列の状態を保持するだけなので、

ただし、エクスプローラで特殊文字を表示する機能に影響する場合があります。このために、ツール>オプション>一般>エンコーディングを使用して、エクスプローラでエンコーディングを設定することもできます。

+0

ありがとうございます。実際にObjectDBに問題はありませんでしたが、ResourceBundleだけがUTF-8以外の文字列を指定していましたが、これを私の答えで修正しました。 –

関連する問題