Я пытаюсь исправить проблему в базе данных в кодировке UTF-8.При переходе на текущую систему баз данных похоже, что данные были сжаты в кодировку Latin-1.Я написал быстрый скрипт Groovy, чтобы найти и сообщить об ошибках кодирования.Но это не соответствует ничему.
Если я напишу аналогичный код на Java, отчет будет работать нормально!
Итак, я предполагаю, что новичок в Groovy делает глупость.Кто-нибудь может увидеть ошибку в моем подходе?Я пытался жестко закодировать символы в операторе select, но я не могу заставить работать какие-либо специальные символы.
Заранее спасибо, конечно.
aH
Groovy Code
import groovy.sql.Sql
def dias = ["è": "é", "…": "…"]
def atk = Sql.newInstance(
'jdbc:mysql://myURL:3306/myDB?useUnicode=true&characterEncoding=utf8',
'user',
'pass',
'com.mysql.jdbc.Driver'
)
dias.each() {x ->
println x.getKey()
atk.eachRow("SELECT `noteContent` FROM `ArchDescriptionRepeatingData`"
+ "WHERE `noteContent` LIKE(\"%" + x.getKey() + "%\")"
) { y ->
println y
}
}
, как и было запрошено, здесь указан код Java, в который я добавил некоторые дополнительные функции:
import java.sql.*;
import java.util.*;
import java.util.regex.*;
public class Diacritic {
private Connection connection;
private HashMap<String, String> dia;
Diacritic() throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://myURL:3306/myDB"
+ "?user=user&password=pass");
dia = new HashMap<String, String>();
populateArray();
System.out.println("Component Titles");
for(Map.Entry e : dia.entrySet()) {
String st = e.getKey().toString();
Pattern p = Pattern.compile(st);
System.out.println();
System.out.println(st + "\t\t->\t" + e.getValue().toString());
System.out.println();
Statement s = connection.createStatement();
ResultSet r = s.executeQuery("SELECT `itemValue` FROM `ListOrderedItems`"
+ "WHERE `itemValue` LIKE(\"%" + st + "%\")"
//+ "LIMIT 0, 100000"
);
int x = 0;
while (r.next()) {
x++;
Matcher m = p.matcher(r.getString(1));
if(m.find()) {
int start = 0;
int mstart = m.start();
int mend = m.end();
int end = r.getString(1).length();
if (mstart - start <= 10 || end - mend <= 10) {
System.out.println(x + ": " + r.getString(1)
+ "\t->\t"
+ "\t" + r.getString(1).substring(0,mstart)
+ e.getValue().toString()
+ r.getString(1).substring(mend)
);
}
else {
System.out.println(x + ": " + r.getString(1).substring((mstart - 10), (mend + 10))
+ "\t->\t"
+ "\t" + r.getString(1).substring((mstart - 10),mstart)
+ e.getValue().toString()
+ r.getString(1).substring(mend, (mend + 10))
);
}
}
}
s.close();
}
}
public static void main (String[] args) throws SQLException, ClassNotFoundException {
Diacritic d = new Diacritic();
}
public void populateArray() {
dia.put("è", "é");
dia.put("…", "…");
dia.put("—", "");
dia.put("‑”", "-");
dia.put("é", "é");
dia.put("æ", "æ");
dia.put("ë", "ë");
//etc...
}
}