Java 使用UTF-8编码导出HSQLDB数据库

Java 使用UTF-8编码导出HSQLDB数据库,java,utf-8,hsqldb,geotools,Java,Utf 8,Hsqldb,Geotools,我正在尝试导出GeoTools HSQL 2数据库,并将其加载回需要旧数据库格式的遗留系统的HSQL 1。这些表包括诸如度符号之类的字符。但是,它显示为转义序列\u0080,而不是编码字符。我需要修复这个问题,或者让HSQL 1导入将转义字符转换回正确的编码 e、 g 在结果中,我看到了这样的情况\u00b5: INSERT INTO EPSG_ALIAS VALUES(389,'epsg_unitofmeasure',9109,7302,'\u00b5rad','') 查看hsqldb,我不

我正在尝试导出GeoTools HSQL 2数据库,并将其加载回需要旧数据库格式的遗留系统的HSQL 1。这些表包括诸如度符号之类的字符。但是,它显示为转义序列
\u0080
,而不是编码字符。我需要修复这个问题,或者让HSQL 1导入将转义字符转换回正确的编码

e、 g

在结果中,我看到了这样的情况
\u00b5

INSERT INTO EPSG_ALIAS VALUES(389,'epsg_unitofmeasure',9109,7302,'\u00b5rad','')
查看hsqldb,我不确定如何控制正在写入的数据的编码,假设这是要查看的正确位置:


编码看起来像Unicode(一到四个十六进制数字)。 在
bash
中尝试此操作(快速和肮脏):


echo-ne“$(dump\u utf8.sql

您可以使用以下过程:

  • 在源数据库中,创建与原始表列完全相同的文本表。使用
    为每个表创建文本表copyname(类似于sourcename)
  • 使用
    SET TABLE thecopyname SOURCE'thecopyname.csv;编码=UTF-8'
    用于每个
    复制
    表格
  • 在每个
    中插入copyname
    表,使用
    从源名称中选择*
  • 使用
    为每个
    copyname
  • 现在,您将拥有几个UTF8编码的
    copyname.csv
    文件(每个文件都有自己的名称)
  • 在目标数据库上使用反向过程。您需要明确地创建文本表,然后使用
    SET TABLE thecopyname SOURCE'thecopyname.csv;编码=UTF-8'

  • 您能解释一下吗?
    $(
    读取sql转储(bash命令替换,与
    $(cat dump.sql)
    相同)。输出是解释unicode反斜杠转义字符(选项-e)的回声,并且没有尾随换行符(选项-n)。然后将回显结果重定向到文件dump_utf8.sql。我假设您的系统运行在默认区域设置UTF-8中,为了验证它,请在bash shell中使用
    echo$LANG
    ,从而生成有效的UTF-8编码的sql转储。这是一个非常酷的技巧,但它会被\u000a转换为新行而绊倒。我在UI中执行此操作的机制方面遇到了问题,所以我在这里问了一个后续问题:
    INSERT INTO EPSG_ALIAS VALUES(389,'epsg_unitofmeasure',9109,7302,'\u00b5rad','')