gpt4 book ai didi

Java/C# 程序访问 Oracle 数据库,字符串中的字符错误

转载 作者:行者123 更新时间:2023-12-02 08:48:07 25 4
gpt4 key购买 nike

我在 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字符(即字符集),因此它消耗了“0xA6”之后的“A”和“”。

有没有办法让 Java 在将“A”和“”与“0xA6”分组时不那么激进?

任何建议表示赞赏,

米杰

编辑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[] 或字符串中的字节会在 0xA6、“A”和“”位置(0xEF、0xBF、0xBD)中显示奇怪的字节。

/编辑0

最佳答案

看起来像是数据损坏。原始数据可能采用 ISO-8859 编码,并未转换为 UTF-8。

0xA6 本身在 ISO-8859-1 中是“断竖线” 字符,这没有意义,

但是

ISO-8859-2 中,它相当于 Unicode 0x015A(带尖锐音的拉丁文大写字母 S)或 Ś,看起来很可能。它使整个字符串FLORENŚA PALACE HOTEL LTDA

解决方案是用正确的 UTF-8 编码替换该字符,即 0xc5 0x9a

关于Java/C# 程序访问 Oracle 数据库,字符串中的字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15030720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com