Java:在错误的编码字符串中搜索而不修改它

时间:2015-05-07 11:11:55

标签: java utf-8 latin1

我必须在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[]。通过调用

返回String
new String(getContent(), "ISO-8859-1")

这里的问题是,我无法将其更改为UTF-8,因为它会破坏我们应用程序的其余部分,该应用程序基于以这种方式提供数据的第三方应用程序。

2 个答案:

答案 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的设计。