我必须在Document中找到用户定义的String(使用 Java ),它存储在BLOB的数据库中。当我搜索带有特殊字符的字符串(“Umlaute”,äöü等)时,它会失效,这意味着它根本不会返回任何位置。并且我不允许将文档的内容转换为UTF-8(这可以解决这个问题,但会引发一个新的,甚至更大的问题)。
其他一些信息: 文档的内容在“ISO-8859-1”(Latin1)中以字符串形式返回。 这是一个例子,String的外观如下:
Die Erkenntnis, daà der Künstler Schutz braucht, ...
这应该是这样的:
Die Erkenntnis, daß der Künstler Schutz braucht, ...
如果我正在搜索Künstler
,则无法找到它,因为它会查找ü
但只找到ü
。
是否可以将Künstler
转换为Künstler
,以便我可以搜索错误的编码版本?
注意:的
我们正在使用Hibernate Framework进行数据库访问。文档内容的原始Getter返回byte[]
。通过调用
new String(getContent(), "ISO-8859-1")
这里的问题是,我无法将其更改为UTF-8,因为它会破坏我们应用程序的其余部分,该应用程序基于以这种方式提供数据的第三方应用程序。
答案 0 :(得分:1)
好吧,看起来我找到了一种方法来破解编码。
sudoku(X1,X2,X3,X4,X5,X6,X7,X8,
X9,X10,X11,X12,X13,X14,X15,X16,X17,
X18,X19,X20,X21,X22,X23,X24,X25,X26,
X27,X28,X28,X30,X31,X32,X33,X34,X35,X36):-
X2=4,
X4=2,
X7=3,
X9=1,
X13=6,
X24=6,
X30=2,
X33=3,
X34=6,
X35=1,
permutation([X1,X3,X5,X6],[1,3,5,6]),
permutation([X8,X10,X11,X12],[2,4,5,6]),
permutation([X14,X15,X16,X17,X18],[1,2,3,4,5]),
permutation([X19,X20,X21,X22,X23],[1,2,3,4,5]),
permutation([X25,X26,X27,X28,X29],[1,3,4,5,6]),
permutation([X31,X32,X36],[2,4,5]),
permutation([X1,X19,X25,X31],[1,2,4,5]),
permutation([X8,X14,X20,X26,X32],[1,2,3,5,6]),
permutation([X3,X15,X21,X27],[2,4,5,6]),
permutation([X10,X16,X22,X28],[1,3,4,5]),
permutation([X5,X11,X17,X23,X29],[2,3,4,5,6]),
permutation([X6,X12,X18,X36],[1,3,4,5]),
permutation([X1,X3,X8],[2,5,6]),
permutation([X5,X6,X10,X11,X12],[1,3,4,5,6]),
permutation([X14,X15,X19,X20,X21],[1,2,3,4,5]),
permutation([X16,X17,X18,X22,X23],[1,2,3,4,5]),
permutation([X25,X26,X27,X31,X32],[1,2,4,5,6]),
permutation([X28,X29,X36],[3,4,5]).
通过在UTF-8中获取字符串new String("Künstler".getBytes("UTF-8"), "ISO-8859-1")
的字节,然后创建一个新的String,告诉Java这是Latin1,它将转换为Künstler
。这是一个黑客的地狱,但似乎运作良好。
答案 1 :(得分:0)
已由你自己回答。
另一种方法: 如果您可以搜索blob,则可以使用
进行搜索"SELECT .. FROM ... WHERE"
+ " ... LIKE '%" + key.replaceAll("\\P{Ascii}+", "%") + "%'"
这将用%
通配符替换非ASCII序列:UTF-8多字节序列是非ASCII的设计。