我正在尝试使用上传的CSV文件(使用Java中的InputStream)写入新的CSV文件(使用特定的文件编码[即UTF-8])并将其传递给具有文件位置的另一个函数。
如果我将任何文件转换为UTF-8,无论编码如何,我都会丢失数据吗?如果是这样,我如何保留可能有变化风险的角色?
boolean success = false;
try {
OutputStream out = new FileOutputStream(new File(
uploadedFileLocation));
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(uploadedFileLocation), "UTF-8");
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedInputStream.read()) != -1) {
out.write(bytes, 0, read);
// osw.write(read);
}
out.flush();
out.close();
/*osw.flush();
osw.close();*/
uploadedInputStream.close();
success = true;
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
当你创建InputStream(Buffered,File,等等)时,你可以给出charset ...... 读者将转换为Java中使用的UTF。 当你创建一个OuputStream时,它是一样的。给出编码,编写器将转换值。
事实上,从ISO - > UTF,你很安全。如果您尝试编写目标字符集中不存在的字符,则反向操作为false。类似的东西......(采取你喜欢的流层次结构)
new InputStreamReader(new FileInputStream(new File("")), Charset.forName("UTF-8"));
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file"), Charset.forName("UTF8")));