我有一个Person pojo,有一个name属性,我将其存储在我的数据库中的各个person表中.我的db服务器是MySQL,utf-8设置为默认服务器编码,persons表是InnoDB表,也是用utf-8作为默认编码创建的,我的db连接字符串指定utf-8作为连接编码.
我需要创建和存储新的Person pojos,通过从每行包含名称的txt文件(persons.txt)中读取它们的名称,但文件编码是UTF-16.
persons.txt
约翰
Μαρία
埃莱娜
等等..
这是一个示例代码:
PersonDao dao = new PersonDao();
File file = new File("persons.txt");
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(file), "UTF-16"));
String line = reader.readLine();
while (line!=null) {
Person p = new Person();
p.setName(line.trim());
dao.save(p);
line = reader.readLine();
}
Run Code Online (Sandbox Code Playgroud)
总而言之,我正在读取字符串字符为utf-16,将它们存储在局部变量中并将它们保存为utf-8.
我想问一下:在此过程中是否会发生任何字符转换?如果是,那么这会发生在什么时候?由于utf-16 - > utf-8工作流程,我是否有可能最终存储损坏的字符?
InputStreamReader从外部表示在指定的编码(UTF-16在你的情况下),以内部表示转换字符(即char,String),这始终是UTF-16也是如此,所以有效地存在于你的情况在这里没有转换.
Strings的内部表示应该由JDBC驱动程序转换为数据库编码,因此您不应该关心它(尽管在MySQL的情况下,您应该关心在连接字符串中指定正确的数据库编码).
如果正确指定了输入编码和(在MySQL的情况下)数据库编码,则在转换期间不存在数据丢失的可能性,因为UTF-8和UTF-16都用于表示相同的字符集.
| 归档时间: |
|
| 查看次数: |
10792 次 |
| 最近记录: |