带中文的字符串数据写入文件出现数据残缺
2018-02-26 15:02
531 查看
场景:(UTF-8编码)将字符串写入文件,当字符串中包含中文时,出现写入文件的数据残缺,而当不包含中文时,写入文件的数据正常。示例:
String str = "fadsfdsf212"; 写入文件内容:fadsfdsf212
String str = "4564大地方122321"; 写入文件内容:4564大地方
写入文件的代码:
File txt=new File(url);
if(!txt.exists()){
txt.createNewFile();
}
byte bytes[]=new byte[1024];
bytes=str.getBytes("UTF-8");
int b=str.length();
FileOutputStream fos=new FileOutputStream(txt,true);
fos.write(bytes,0,b);
fos.close();
存在问题的原因在于,计算字符串的长度时,一个中文长度只算成1,而实际上以UTF-8编码的中文占3个字节,所以实际由str.length()得到的b的值小于实际字节数,导致出现数据写入残缺的情况。
解决方法:
思路:计算正确的字节数。
首先是获取到字符串中的中文的个数count,由于每个中文占3个字节,而上述str.length()的方式只把中文按一个字节计算,即每个中文少计算了2个字节,则实际的字节数应该等于str.length()+count*2。
代码修改如下:
String regex = "[\u4e00-\u9fff]";
int count = (" " + str + " ").split (regex).length - 1; //匹配字符串中的中文个数
File txt=new File(url);
if(!txt.exists()){
txt.createNewFile();
}
byte bytes[]=new byte[1024];
bytes=str.getBytes("UTF-8");
int b=str.length()+count*2; //补上漏算的字节数
FileOutputStream fos=new FileOutputStream(txt,true); //true表示将字符串追加在文件原有内容后面
fos.write(bytes,0,b);
fos.close();
String str = "fadsfdsf212"; 写入文件内容:fadsfdsf212
String str = "4564大地方122321"; 写入文件内容:4564大地方
写入文件的代码:
File txt=new File(url);
if(!txt.exists()){
txt.createNewFile();
}
byte bytes[]=new byte[1024];
bytes=str.getBytes("UTF-8");
int b=str.length();
FileOutputStream fos=new FileOutputStream(txt,true);
fos.write(bytes,0,b);
fos.close();
存在问题的原因在于,计算字符串的长度时,一个中文长度只算成1,而实际上以UTF-8编码的中文占3个字节,所以实际由str.length()得到的b的值小于实际字节数,导致出现数据写入残缺的情况。
解决方法:
思路:计算正确的字节数。
首先是获取到字符串中的中文的个数count,由于每个中文占3个字节,而上述str.length()的方式只把中文按一个字节计算,即每个中文少计算了2个字节,则实际的字节数应该等于str.length()+count*2。
代码修改如下:
String regex = "[\u4e00-\u9fff]";
int count = (" " + str + " ").split (regex).length - 1; //匹配字符串中的中文个数
File txt=new File(url);
if(!txt.exists()){
txt.createNewFile();
}
byte bytes[]=new byte[1024];
bytes=str.getBytes("UTF-8");
int b=str.length()+count*2; //补上漏算的字节数
FileOutputStream fos=new FileOutputStream(txt,true); //true表示将字符串追加在文件原有内容后面
fos.write(bytes,0,b);
fos.close();
相关文章推荐
- UTF-8编码)将字符串写入文件,当字符串中包含中文时,出现写入文件的数据残缺,而当不包含中文时,写入文件的数据正常
- VC中使用CFile正确的追加写中文数据到文件不出现乱码-unicode字符集
- tinyxml把xml数据写入字符串,不写入文件的方法
- Python 2.7.3 将列表中文数据写入文件
- 如何用idapython脚本获取字符串窗口的数据并写入文件
- 将字典直接写入文件,出现中文乱码问题
- 如何把字符串写入SD卡文件中,如何读取SD卡文件的数据
- 用fileWriter和bufferedwriter写入文件 出现中文问题
- [C/C++标准库]_[初级]_[读写中文路径的文件--写入unicode字符串]
- 爬取得到数据写入过文件时出现UnicodeEncodeError的错误
- [C/C++标准库]_[初级]_[读写中文路径的文件--写入unicode字符串]
- Redis 中文入库成功,读取数据写入文件乱码问题
- 使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题
- Java 简单解决springmvc获取properties文件里面中文内容出现论码问题(我遇到的问题是数据提交检验时返回的错误提示出现乱码)
- 使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题
- 将字典直接写入文件,出现中文乱码问题
- 4.5统计字符串中数字和字母出现的次数,将结果写入文件
- 将数据写入到CSV文件中--出现“科学计数法”问题,已解决
- MFC/C++ CFile写入文件数据,输出utf-8的文本。(防止中文乱码)
- 解决springmvc返回json数据IE出现文件下载和json数据中文乱码问题