2

我正在尝试使用以下代码在 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
    }
}

本地化/语言_fa_IR.properties 存在并正确打开。

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

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

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

4

2 回答 2

1

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

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

于 2017-09-14T09:54:52.930 回答
1

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

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

于 2017-09-14T13:00:33.103 回答