【问题标题】:How can I save UTF-8 strings in an ObjectDB JPA database?如何在 ObjectDB JPA 数据库中保存 UTF-8 字符串?
【发布时间】:2018-02-22 19:23:11
【问题描述】:

我正在尝试使用以下代码在 ObjectDB 数据库中保存一些 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
    }
}

localization/language_fa_IR.properties 存在并正确打开。

DAO 的 persistOrUpdate 方法只不过是事务中的 EntityManager.persist 函数。 (如果键存在,EntityManager.merge 是否存在)

但是当我打开 ObjectDBViewer 时,我看到了这个:

如何在不更改字符的情况下保存字符串?

【问题讨论】:

    标签: java jpa utf-8 objectdb


    【解决方案1】:

    ObjectDB 作为一个对象数据库,只在您存储对象时检索对象及其内容,包括字符串字段。所以通常编码与使用 ObjectDB 无关,因为它只是将字符串的状态保留在内存中。

    但是,它可能会影响您在资源管理器中查看特殊字符的能力。为此,您还可以尝试使用工具 > 选项 > 常规 > 编码在资源管理器中设置编码。

    【讨论】:

    • 谢谢,ObjectDB 实际上没有任何问题,只是 ResourceBundle 给出了一个非 UTF-8 字符串,我在回答中解决了这个问题。
    【解决方案2】:

    实际上,ObjectDB 没有问题,ResourceBundle 返回了一个非 UTF 字符串。我用这条线解决了它:

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

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 2015-02-20
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多