我有一个带有希伯来字符的CSV文件。当我在TextEdit中打开它时,在我的Mac上,我可以看到希伯来语就好了。
我使用扫描仪将它带入我的Java代码,同时将其编码为UTF-8:
File file = new File(System.getProperty("user.dir") + System.getProperty("file.separator") + fileName);
Scanner scanner = new Scanner(new FileInputStream(file), "UTF-8");
然后我解析,并使用Hibernate将其发送到MySql数据库:
for(int i=0; i<elements.length; i++) {
String elem = elements[i];
String[] client = elem.split(",");
for(int j=0; j<client.length; j++) {
Client c = new Client();
c.setFirstName(client[j]);
System.out.println(client[j]);
DatastoreManager.persist(c);
}
}
Eclipse consol中的打印输出和MySql的输入都是?????。
搜索解决方案我尝试将字符串转换为字节:
byte[] ptext = client[j].getBytes("UTF8");
String value = new String(ptext, "UTF-8");
我将MySql表转换为字符集UTF-8 Unicode和Collation utf8mb4_general_ci。
但似乎没有任何效果。有任何想法吗?
答案 0 :(得分:1)
在mac中使用文件-I {filename}来检查编码。 编码你得到改变:
Scanner scanner = new Scanner(new FileInputStream(file), "UTF-8");
现在我想你在eclipse中看到了正确编码的字符。
由于您使用的是Hibernate和MySql,您应该在hibernate配置中添加以下内容:
app_persistance.connection.url=jdbc:mysql://localhost:3306/yourDatabase?useUnicode=true&characterEncoding=utf-8
app_persistance.hibernate.connection.CharSet=utf8
app_persistance.hibernate.connection.characterEncoding=utf8
app_persistance.hibernate.connection.useUnicode=true