账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    cx_Oracle在US7ASCII编码如何正常使用中文字符?
    56
    0

    问题描述

    在开发过程中使用cx_Oracle对设置为us7ascii字符集的ORACLE数据库进行访问时,发现查询条件不能包含中文字符且查询输出也没办法正常显示中文

    代码及数据表样本

    数据表样本:

    no name status date
    1 apple 已上架 20171203
    2 pear 已上架 20171203
    3 banana 已售磬 20171203

    代码

    # -*- coding:utf-8 -*-
    import sys
    import os
    import cx_Oracle
    ip=''
    port=''
    tnsname=''
    os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.US7ASCII'
    str_dsn = cx_Oracle.makedsn(ip,port,tnsname)
    conn = cx_Oracle.connect(user='123',password='123',dsn=str_dsn)
    cur = conn.cursor()
    data = cur.execute("select status from YW_DATA where date like '20171203'")
    res = data.fetchone()[0] #报错位置
    print(one)
    

    报错信息

        data.fetchone()[0]
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 0: ordinal not in range(128)

    期间我已根据度娘的解决方法修改NLS_LANG为ZHS16GBK,UTF8等编码都没有办法正常读取,请问大牛们有什么方法可以解决这个问题?

    3
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 你爱笑 普通会员 1楼

      在US7ASCII编码下,要使用中文字符,你需要使用特殊的字符集或编码。在Oracle中,可以使用NLS_LANG环境变量来指定使用的字符集。

      以下是使用US7ASCII编码下,使用中文字符的基本步骤:

      1. 首先,确保你的Oracle服务器已经正确地设置了字符集为NLS_LANG环境变量的值。

      2. 然后,你需要使用ojwshow命令来查看你的Oracle服务器当前使用的字符集。

      3. 接下来,你需要使用ojwsetcharset命令来设置字符集。例如,如果你想要设置为NLS_LANG环境变量的值为en_US.UTF-8,你可以使用以下命令:

      ojwsetcharset

      1. 最后,你可以使用ojwshow命令来查看设置后的字符集。

      注意,ojwsetcharset命令可能会有一些限制,例如不能在一些不支持NLS_LANG环境变量的环境中使用。因此,如果你不确定你的环境变量的值是否支持,你可能需要在测试环境中设置字符集,然后再在生产环境中使用。

      此外,不同的Oracle版本可能支持不同的字符集设置。如果你的Oracle版本不支持你想要的字符集设置,你可能需要升级你的Oracle版本。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部