我在 Oracle 中有以下字符串(十六进制转储就在它下面)。如您所见,在第一个“N”之后,有一个假字符“0xA6”。我的 Oracle 实例使用 AL32UTF8 作为字符编码。
FLOREN�PALACE HOTEL LTDA
Typ=1 Len=26: 46,4c,4f,52,45,4e,a6,41,20,50,41,4c,41,43,45,20,48,4f,54,45,4c,20,4c,54,44,41
我有两个服务应该处理这个字符串——一个在 C# 中,另一个在 Java 中。我正在用 C# 处理这个字符串,它说长度是 27。然后我尝试用 Java 处理这个字符串,它说长度是 25。当我用 C# 打印时,它会打印(注意前面的 A 和空格宫)
FLOREN�A PALACE HOTEL LTDA
而在 Java 中,它的打印结果与 Oracle 相同。
当我在 Java 程序中从 Oracle 中选择字符串时,就像 Java 正在“吃掉” 0xA6 和后面的两个字符并将其计为一个字符。我认为 Java 认为它是一个 UTF-8 字符(即 Charset),因此它在“0xA6”之后使用“A”和“”。
在将“A”和“”与“0xA6”分组时,有没有一种方法可以让 Java 不那么激进?
任何建议表示赞赏,
米
编辑 0
我查看了从 Oracle 获取字符串的代码。我正在使用 Oracle JDBC 驱动程序。
Class.forName("oracle.jdbc.OracleDriver");
m_connection = DriverManager.getConnection(m_connectionString, m_username, m_password);
我的连接字符串是
jdbc:oracle:thin:@//192.168.0.18:1521/serviceName
关于从数据库中实际获取字符串,我使用了 ResultSet getBytes、getString、getBinaryStream、getUnicodeStream 调用。例如,当我使用 getBytes 时,查看 byte[]、char[] 或 string 中的字节会显示 0xA6、“A”和“”位置(0xEF、0xBF、0xBD)中的奇怪字节。
/编辑 0