Python 如何加强亚洲语言(如汉语)的字符长度?

Python 如何加强亚洲语言(如汉语)的字符长度?,python,django,postgresql,unicode,chinese-locale,Python,Django,Postgresql,Unicode,Chinese Locale,使用Django v1.10和Postgres 有一个数据字段可能包含符号(如\|?)、数字、字母以及亚洲语言字符的混合 用户表示此字段的最大值应为15个字符 我如何使用Django和Postgres作为数据库来实现这一点?在postgres中,我们使用utf-8编码 1个字符可以是数字、汉字或英文字母 我知道在PHP中,有一个叫做mb_strlen的函数 在Django方法中,强制执行最大字符串长度的最佳方法是什么?首先,您必须定义字符的含义。您提到了韩语,这是许多字符串长度函数误解的语言之一

使用Django v1.10和Postgres

有一个数据字段可能包含符号(如\|?)、数字、字母以及亚洲语言字符的混合

用户表示此字段的最大值应为15个字符

我如何使用Django和Postgres作为数据库来实现这一点?在postgres中,我们使用utf-8编码

1个字符可以是数字、汉字或英文字母

我知道在PHP中,有一个叫做mb_strlen的函数


在Django方法中,强制执行最大字符串长度的最佳方法是什么?

首先,您必须定义字符的含义。您提到了韩语,这是许多字符串长度函数误解的语言之一

可以使用多个unicode字符来描述单个字形(用户感知的字符),例如:

>>> len(u"한")
3
使用unicode字符串可以轻松计算unicode字符数,但这与用户感知的字符数不同。我建议你在网上阅读这篇文章

如果您确实希望计算unicode字符而不是字形,那么这很简单。只需使用带有
max_length
参数的
CharField
(在您的模型和表单上)

但是,如果希望将字段限制为最多15个字符,则必须让数据库字段包含更多字符,并为表单制作一些字符


对于这种验证器来说,一个有用的库可能是,它可以计算字符串中的字形数。

我将字符定义为数字、字母或汉字字母也不是真正的定义。例如,标志한 上面使用的由三个unicode字符(韩语音节)组成:ㅎ,ㅏ 及ㄴ. 你想数一数这条路的长度吗한 作为1或3?我从考虑SOK中排除了韩语和日语,所以似乎您只想计算unicode字符,而不是字母。你们有django型号的吗?你想在哪里强制执行?正如我所写的,最常见的方法是在模型上创建一个字符字段,其
max_length=15
,这将创建一个15字符的数据库列,并在生成的模型表单中验证长度。