如何在 ObjectDB JPA 数据库中保存 UTF-8 字符串?

How can I save UTF-8 strings in an ObjectDB JPA database?

我正在尝试使用以下代码在 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 时,我看到了这个:

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

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

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

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

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