Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python cx_Oracle库查询时解码错误_Python_Oracle_Encoding_Utf 8_Cx Oracle - Fatal编程技术网

使用Python cx_Oracle库查询时解码错误

使用Python cx_Oracle库查询时解码错误,python,oracle,encoding,utf-8,cx-oracle,Python,Oracle,Encoding,Utf 8,Cx Oracle,我在使用pd.read_sql时遇到解码错误。我正在查询Oracle数据库,并使用cx_Oracle库 我已尝试在Oracle连接字符串中传递编码参数,如下所示 cx\u oracle.connect(user=user\u name,password=pwd,dsn=dsn\u tns,encoding=“UTF-8”) 每次运行pd.read_sql时,我都会尝试编码选项并出错,如下所示: 当encoding='UTF-8'时,错误为UTF-8'编解码器无法解码字节 0xc3位于位置34:数

我在使用pd.read_sql时遇到解码错误。我正在查询Oracle数据库,并使用cx_Oracle库

我已尝试在Oracle连接字符串中传递编码参数,如下所示

cx\u oracle.connect(user=user\u name,password=pwd,dsn=dsn\u tns,encoding=“UTF-8”)

每次运行pd.read_sql时,我都会尝试编码选项并出错,如下所示:

  • 当encoding='UTF-8'时,错误为UTF-8'编解码器无法解码字节 0xc3位于位置34:数据意外结束

  • 使用encoding=“UTF-8”,nencoding=“UTF-8”,错误是UTF-8”编解码器无法 解码位置34中的字节0xc3:数据意外结束

  • 使用encoding=“UTF-16”,nencoding=“UTF-16”,错误为ORA-29275:部分错误 多字节字符

  • NLS_字符集是AL32UTF8

    任何人谁面临这个问题并解决了,请建议


    谢谢

    如果您有损坏的数据,请尝试cx\U Oracle文档中建议的方法:


    如果您有损坏的数据,请尝试cx_Oracle文档中建议的方法:


    首先需要确定服务器设置为的字符集:

    SELECT value
    FROM nls_database_parameters
    WHERE parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
    
    然后设置
    .connect()
    encoding
    nencoding
    参数,使客户端与服务器匹配。(服务器上的AL32UTF8与客户端上的UTF-8匹配)

    如果列的类型为
    nvarchar
    nclob
    等,则还需要使用
    nencoding
    参数。但是您没有发布列数据类型,也没有发布查询

    cx_oracle.connect(user=user_name, password=pwd, dsn=dsn_tns, encoding="UTF-8", nencoding="UTF-8")
    

    如果您的服务器确实是
    AL32UTF8
    ,并且cx\u oracle仍然会在
    encoding
    设置为
    UTF-8
    时给您一个解码错误,那么正如另一个答案所说,您的数据已损坏。通过查询不同的较小行集进行测试。

    首先需要确定服务器设置为的字符集:

    SELECT value
    FROM nls_database_parameters
    WHERE parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
    
    然后设置
    .connect()
    encoding
    nencoding
    参数,使客户端与服务器匹配。(服务器上的AL32UTF8与客户端上的UTF-8匹配)

    如果列的类型为
    nvarchar
    nclob
    等,则还需要使用
    nencoding
    参数。但是您没有发布列数据类型,也没有发布查询

    cx_oracle.connect(user=user_name, password=pwd, dsn=dsn_tns, encoding="UTF-8", nencoding="UTF-8")
    

    如果您的服务器确实是
    AL32UTF8
    ,并且cx\u oracle仍然会在
    encoding
    设置为
    UTF-8
    时给您一个解码错误,那么正如另一个答案所说,您的数据已损坏。通过查询不同的较小行集进行测试。

    哪个Python版本?你的代码看起来像什么?如果删除任何编码参数,会发生什么情况?Python3字符串是Unicode的,因此不需要编码。当数据库字段为UTF8时,使用
    UTF16
    只能保证出错输入是什么样子的,从哪里来的?很可能它已经包含无效字符。如果您从文件中加载了一些单字节文本,并试图将其原样传递到数据库,则所有值>127的字节在UTF8中都无效encoding@PanagiotisKanavos:Python版本为3.7。删除编码参数会导致UTF-8错误。@PanagiotisKanavos:输入是从现有数据库加载到Oracle数据库的。它不是从文件中加载的。这些是一些示例数据。顺便说一句,该错误意味着数据不是UTF8。因此,您必须发布一个
    createtable
    语句和
    INSERT
    子句,创建一个带有特定编码字段的表,以及测试数据,人们可以使用这些数据完全重现问题。也许问题在于ORACLE HOME中的硬编码非UTF8编码?哪个Python版本?你的代码看起来像什么?如果删除任何编码参数,会发生什么情况?Python3字符串是Unicode的,因此不需要编码。当数据库字段为UTF8时,使用
    UTF16
    只能保证出错输入是什么样子的,从哪里来的?很可能它已经包含无效字符。如果您从文件中加载了一些单字节文本,并试图将其原样传递到数据库,则所有值>127的字节在UTF8中都无效encoding@PanagiotisKanavos:Python版本为3.7。删除编码参数会导致UTF-8错误。@PanagiotisKanavos:输入是从现有数据库加载到Oracle数据库的。它不是从文件中加载的。这些是一些示例数据。顺便说一句,该错误意味着数据不是UTF8。因此,您必须发布一个
    createtable
    语句和
    INSERT
    子句,创建一个带有特定编码字段的表,以及测试数据,人们可以使用这些数据完全重现问题。也许问题在于ORACLE HOME中的硬编码非UTF8编码?我认为这不是损坏的数据,而是非英语字符的数据。像这样“惠州市", "Фааа,“plynárenský”。所以我不应该取代他们。我应该可以按原样阅读。@ashasasidharan您正在阅读的页面是UTF8,但是您不必做任何事情来发布这些非英语字符。我认为这不是损坏的数据,而是非英语字符的数据。像这样“惠州市", "Фааа,“plynárenský”。所以我不应该取代他们。我应该能够按原样阅读它们。@ashasasidharan您正在阅读的页面是UTF8,但您不必做任何事情来发布这些非英语字符。