原文:http://www.dirk.sh/diary/using-django-smart_str-smart_unicode/

Django 为字符编码的转换提供了非常简洁的方法:

1.django.utils.encoding.smart_unicode
2.django.utils.encoding.smart_str

我们在需要将用户提交的数据转换为 Unicode 的时候,可以使用 smart_unicode,而在需要将程序中字符输出到非 Unicode 环境(比如 HTTP 协议数据)时可以使用 smart_str 方法。拿 DDlog 来说,也有不少地方用到了这两个方法。

1、smart_unicode 在 DDlog 中的使用

Blog 的标签(Tag)一般多少会有中文,对于服务器环境来说,不会安装系统级的 UTF-8 环境,那么浏览器请求的 URL 中包含的中文会作为经过 urllib.quote 编码转换后的 UTF-8 字符串(注意,这种情况下,Django 不会自动转换为 Unicode),这里,我们在使用这个数据之前,需要进行一定的转换。

比较原始的方法类似如下:

1.def post_via_tag(request, tag):
2.from urllib import unquote
3.key = unquote(unicode(tag).encode('UTF-8'))
4.tag_as = Tag.objects.select_related().get(tag__iexact = key)

而如果使用 Django 的 smart_unicode,明显简洁得多(也更符合 DRY 原则):

1.def post_via_tag(request, tag):
2.from django.utils.encoding import smart_unicode
3.tag_as = Tag.objects.select_related().get(tag__iexact =smart_unicode(tag))
4.# ... other code

2、smart_str 在 DDlog 中的使用

DDlog 在接受评论的时候,会将评论者的姓名和邮件地址保存到 Cookie 中,以便该用户下次发表评论的时候自动显示相关信息。而评论者的姓名有可能是中文的,如果直接把中文字符串放到 Cookie 中,会引发 UnicodeEncodeError 异常。

这里需要进行去 Unicode 编码:

1.def post_comment(request, slug):
2.# ... other prepare code
3.response.set_cookie('COMMENT_AS_NAME', smart_str(comment_user.name), expired_at)

就这么简单便捷!

借助 Django 的 smart_str 和 smart_unicode 进行编码转换(转)的更多相关文章

  1. php数组编码转换函数的示例

    场景说明/问题描述: Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据. 自定义函数:  代码如下 复制代码 function array_iconv ...

  2. PHP数组编码转换

    因为一些特殊字符的显示效果的原因不得不把习惯的utf-8工程改成了GBK,由于使用了ajax技术,又涉及到了老问题——编码转换. 一些表单验证需要返回json数据,php的json_encode函数只 ...

  3. 使用vbs脚本进行批量编码转换

    使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默 ...

  4. 关于JS的编码转换问题

    在进行JS开发过程中,尤其是在开发报表时,报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号或乱码等等一系列不能正常显示的情况. 这是由于浏览器和报 ...

  5. 帆软报表FineReport数据库连接编码转换

    1. 问题描述 数据库会以某种编码方式保存与读取数据,FineReport解析时默认使用GBK字符集,若数据库端编码与设计器端编码不一致时,就会导致中文及特殊字符的乱码. FineReport在定义数 ...

  6. 编码转换的处理 DreamWeaver SC6 打开会出现javacsript出现问题的处理

      编码转换的处理: 打开DW后,修改里面有个"页面属性": 点击页面属性,会弹出一个窗口,点击"标题/编码",在"编码"里面选择你要转换的 ...

  7. C++ 字符编码转换类

    记录一下C++ 编码转换的函数: #pragma once #include "afx.h" #define DEFAULT_CODE 0 #define CHINESE_SIMP ...

  8. [2015.02.02]文本编码转换专家 v2.6

    软件名称:文本编码转换专家最新版本:v2.6操作系统:XP/2003/Win7/Win2008软件介绍:文本编码转换专家,界面简洁易用,功能强大实用.自动识别文件编码,有效转换成目标编码.真正的多线程 ...

  9. python 字符编码 转换

    #!/bin/env python#-*- encoding=utf8 -*-# 文件头指定utf8编码还是乱码时,使用下面方式指定# fix encoding problem import sys ...

随机推荐

  1. JS学习笔记(3)--json格式数据的添加,删除及排序方法

    这篇文章主要介绍了json格式数据的添加,删除及排序方法,结合实例形式分析了针对一维数组与二维数组的json格式数据进行增加.删除与排序的实现技巧,需要的朋友可以参考下   本文实例讲述了json格式 ...

  2. 基于html5制作3D拳击游戏源码下载

    今天给大家分享一款基于HTML5实现的3d拳王游戏源码.这款实例适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器. 在线预览 ...

  3. java的map取值

    第一种方法根据键值的名字取值 import java.util.HashMap; import java.util.Map; /**   * @param args   */  public stat ...

  4. HTTP Status 404–/webDemo/hello

    现在用一排很小的字写出来,我真是个大傻逼

  5. 4种方法让SpringMVC接收多个对象 <转>

    问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...

  6. mongdb 慢查询

    查看mongodb慢查询 赶紧打开服务器爸爸,开慢查询,看下耗时500ms以上的都是些啥: db.setProfilingLevel(2,500) 看下最近的10条具体的慢查询指令: db.syste ...

  7. jrtplib编译指南

    The library offers support for the Real-time Transport Protocol (RTP), The library uses the JThread  ...

  8. MVC 使用IOC实现

    实现步骤: 1. 实现IDependencyResolver接口并通过DependencyResolver.SetResolver告知MVC,将部分类型实例解析工作交由IoC容器来处理: using ...

  9. ConfigParser 读写配置文件

    一.ini: 1..ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式 2.ini文件创建方法: (1)先建立一个记事本文件.(2 ...

  10. mysql触发器小实验

    今天实验了一下mysql的触发器 mysql> use test; Database changed mysql> desc time; +-------+---------------- ...