DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Django报"ascii codec can't decode byte ... ordinal not in range 128"错误解决方法


下午在Django里连接telnet服务器,总报"ascii codec can't decode byte ... ordinal not in range 128"错误,参考,发现是由于Python2.x telnetlib的连接参数要求是str类型,但Django里所有的字符串都是unicode,二者不兼容导致上述错误,解决方法是用Django提供的smart_str()方法将unicode转换为str:

from neconnector.models import Channel from django.utils.encoding import smart_str import telnetlib def translate_str(input):

return smart_str(input, encoding='utf-8', strings_only=False, errors='strict')

ch = get_object_or_404(Channel, pk=conn_id) #从数据库里取出unicode类型对象

ip = translate_str(ch.ip) # 转换为str

tn = telnetlib.Telnet(ip)

...

同理,写入数据库时需要用smart_unicode方法做逆向转换。



Published

May 25, 2012

Last Updated

May 25, 2012

Category

Tech

Tags

  • django 5
  • Unicode 10

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor