Tôi có một thủ tục được lưu trữ Java để lấy bản ghi từ bảng bằng cách sử dụng đối tượng Resultet và tạo tệp csv.Làm thế nào để thêm một UTF-8 BOM trong java
BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
retBLOB.open(BLOB.MODE_READWRITE);
OutputStream bOut = retBLOB.setBinaryStream(0L);
ZipOutputStream zipOut = new ZipOutputStream(bOut);
PrintStream out = new PrintStream(zipOut,false,"UTF-8");
out.write('\ufeff');
out.flush();
zipOut.putNextEntry(new ZipEntry("filename.csv"));
while (rs.next()){
out.print("\"" + rs.getString(i) + "\"");
out.print(",");
}
out.flush();
zipOut.closeEntry();
zipOut.close();
retBLOB.close();
return retBLOB;
Nhưng tệp csv được tạo không hiển thị đúng ký tự tiếng Đức. Cơ sở dữ liệu Oracle cũng có giá trị NLS_CHARACTERSET của UTF8.
Vui lòng đề xuất.
Chỉ trong trường hợp bạn chưa từng gặp vấn đề này trước đây, lưu ý rằng tiêu chuẩn Unicode không yêu cầu hoặc khuyên bạn nên sử dụng BOM với UTF-8. Nó không phải là bất hợp pháp, hoặc, nhưng không nên được sử dụng bừa bãi. Xem [tại đây] (http://unicode.org/faq/utf_bom.html#BOM) để biết chi tiết, bao gồm một số nguyên tắc về thời gian và địa điểm sử dụng. Nếu bạn đang cố gắng xem tệp csv trong Windows, đây có thể là một sử dụng hợp lệ của BOM. –
Có, chúng tôi đang cố gắng để xem các csv trong Windows, nhưng csv tạo ra vẫn cho thấy nhân vật bị cắt xén cho các ký tự Đức. Đây có phải là cách đúng để thiết lập BOM không? – Fadd
Vâng, đúng vậy. Tiêu chuẩn Unicode đề xuất ** chống lại ** bằng cách sử dụng BOM (không thực sự) với UTF-8. – tchrist