Mar*_*eon 5 java oracle unicode character-encoding
一些伪代码:
String a = "A bunch of text"; //UTF-16
saveTextInDb(a); //Write to Oracle VARCHAR(15) column
String b = readTextFromDb(); //UTF-16
out.write(b); //Write to http response
Run Code Online (Sandbox Code Playgroud)
当您将Java String(UTF-16)保存到Oracle VARCHAR(15)时,Oracle是否也将其存储为UTF-16?Oracle VARCHAR的长度是指Unicode字符数(而不是字节数)吗?
当我们写入b时,ServletResponse这是写为UTF-16还是我们默认转换为另一种编码,如UTF-8?
不要考虑 UTF-16,而是考虑字符串的“内部表示”。Java中的字符串是某种字符,你不关心内部使用哪种编码。如果您与程序外部交互,编码就变得很重要。在您的示例中,saveTextInDb、readTextFromDb 和 write 就是这样做的。每次与外界交换字符串时,都会使用一种转换编码。saveTextInDb(和read)看起来像是自制方法,至少我不知道它们。因此,您应该查找该方法使用哪种编码。Writer 的 write 方法总是创建字节,表示与 writer 关联的编码。如果您从 HttpServletResponse 获取 Writer,则关联的编码是用于输出响应的编码(将在标头中发送)。
response.setEncoding("UTF-8");
Writer out = response.getWriter();
Run Code Online (Sandbox Code Playgroud)
此代码返回时不带 Writer,将字符串转换为 UTF-8 编码。如果写入文件,则类似:
Writer fileout = new OutputStreamWriter(new FileOutputStream(myfile), "ISO8859-1");
Run Code Online (Sandbox Code Playgroud)
如果您访问数据库,您使用的框架应该确保与数据库的字符串交换一致。
| 归档时间: |
|
| 查看次数: |
6163 次 |
| 最近记录: |