zoukankan      html  css  js  c++  java
  • UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    #coding=utf-8
    
    from selenium import webdriver
    import unittest,time
    import sys
    
    #在27 28行中调试 获取网页title
    # reload(sys)
    # sys.setdefaultencoding('utf-8') 
    
    class MyTest(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(10)
            self.base_url = "http://www.youdao.com"
    
    
        def test_youdao(self):
            driver = self.driver
            driver.get(self.base_url + "/")
            driver.find_element_by_name("q").clear()
            driver.find_element_by_name("q").send_keys("webdriver")
            driver.find_element_by_id("border").click()
            time.sleep(2)
            title = driver.title
            # print (title.decode('utf-8')).encode('gb2312')
            # print title
            self.assertEqual(title,u"有道首页")
    
        
        def tearDown(self):
            self.driver.close()
    
    
    if __name__ == '__main__':
        unittest.main()

    如果 29行的title不对 会报错 

    结果报了如下的错误:

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
     

    然后在代码前使用了:

    import sys
    reload(sys)

    sys.setdefaultencoding('utf-8') 

    这个编码设置,运行依然报如上错误。

    从输出看,解码是没问题的,反而是编码出了问题,应该是当前环境下print时候编码出的问题

    于是,将代码改为:

    print (title.decode('utf-8')).encode('gb2312')

    结果没问题了。

    所以在使用 print 的时候,要注意环境所需的编码。 

  • 相关阅读:
    如何解决C#异常:必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用,请确保你的Main函数已在其上标记了STAThreadAttribute
    go多态
    go泛型
    protoc工具使用
    grpc protobuf协议
    grpc根据proto文件自动生成go源码
    go安装grpc
    go protobuf
    go读取http.Request中body的内容
    go数据库操作
  • 原文地址:https://www.cnblogs.com/Lam7/p/6635714.html
Copyright © 2011-2022 走看看