我遇到了一个无法找到解决方案的问题。我正在构建一个Web应用程序来从Firebird 2.5数据库中检索数据。数据库正在使用ISO8859-1。数据是Text-BLOB。
通过JPA(与Glassfish 4.1.1捆绑的Eclipselink)访问数据。问题与特殊字符有关(商标 - 标志,德国变形金刚,ß)。我已经尝试了两天,但我无法找到解决方案。现在我试图圈出问题并分析从数据库中检索到的原始数据。
一个例子:想象一下以下文字:
EasyLan® Dualboot® Patchkabel RJ45 Kat.5 geschirmt 1:1 grau 2,00m
在Windows上运行的Glassfish上,我得到以下字节:
45 61 73 79 4c 61 6e ffffffae 20 44 75 61 6c 62 6f 6f 74 ffffffae 20 50 61 74 63 68 6b 61 62 65 6c 20 52 4a 34 35 20 4b 61 74 2e 35 20 67 65 73 63 68 69 72 6d 74 20 31 3a 31 20 67 72 61 75 20 32 2c 30 30 6d
在Linux上运行的Glassfish上,我得到以下字节:
45 61 73 79 4c 61 6e ffffffef ffffffbf ffffffbd 20 44 75 61 6c 62 6f 6f 74 ffffffef ffffffbf ffffffbd 20 50 61 74 63 68 6b 61 62 65 6c 20 52 4a 34 35 20 4b 61 74 2e 35 20 67 65 73 63 68 69 72 6d 74 20 31 3a 31 20 67 72 61 75 20 32 2c 30 30 6d
如您所见,注册商标(®)似乎搞砸了。
我的连接池使用完全相同的配置,我为两者添加了一个charset参数(ISO8859-1)。我无法更新到Firebird 3,因为有问题的数据库是我们的ERP系统之一。
有没有人有解决办法解决这个问题并将这些字符转换为有效的UTF-8?所有其他转换尝试都失败了(例如
new String(new String(rawValue.getBytes("ISO-8859-1")).getBytes("UTF-8"))
或
new String(new String(rawValue.getBytes("Windows-1252")).getBytes("UTF-8"))