如何在 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 无关,因为它只是在内存中保留字符串的状态。
但是,它可能会影响您在资源管理器中查看特殊字符的能力。为此,您还可以尝试使用工具 > 选项 > 常规 > 编码在资源管理器中设置编码。
我正在尝试使用以下代码在 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 无关,因为它只是在内存中保留字符串的状态。
但是,它可能会影响您在资源管理器中查看特殊字符的能力。为此,您还可以尝试使用工具 > 选项 > 常规 > 编码在资源管理器中设置编码。