gpt4 book ai didi

python - 应用 unicode 过滤器时,Django 字符串在模板中消失

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:25 24 4
gpt4 key购买 nike

我有一个自己编写的工具,可以将印度音译字符串转换为 unicode 输出,工作原理如下:

>>> x_HK_to_UNI("ahaM")

这会产生以下字符串:

'aha\xe1\xb9\x82''

到目前为止一切顺利,该工具已经过测试并已用于转换数千个文档。现在我正在编写一个 Django 应用程序,并希望将此函数作为模板中的过滤器应用。代码如下所示:

from __future__ import unicode_literals
from django import template
from django.utils.encoding import smart_text
from xliterator import *
register = template.Library()

@register.filter
def process_trans_for_html(string):
newstring = []
string = string.split(' ')
for word in string:
if word[-3:] == '_xn' :
newstring.append(x_HK_to_UNI(word[:1]).upper()+(x_HK_to_UNI(word[1:-3]).lower())
elif word[-3:] == '_xh' :
newstring.append(x_HK_to_UNI(word[:-3]).lower())
else:
newstring.append(word)
return ' '.join(newstring)

在模板中,我通过这种方式将数据传递给过滤器:

{{ line.line|process_trans_for_html }}

基本上,只要不替换任何内容,该函数就可以工作,因此当它处理 yena_xn 时,它会在网站上正确显示为 Yena。但是ahaM_xn应该变成ahaṃ(这是x_HK_to_UNI的工作) - 当遇到这样的单词时,整个字符串就会消失并在页面上留下空白。

对此有什么建议吗?我已经尝试过各种 unicode 转换的东西,但似乎没有太多帮助。我感觉比较困惑。也没有错误消息。

我使用Python2.7。

编辑:这里是 xliterator.py 的相关部分:

import sys, re, os

SEPARATOR_PRIMARY=";"

class Xlator(dict): # Xlator is initialized through a mapping
def _make_regex(self):
"""Build re object based on the keys of the current dict"""
return re.compile("|".join(map(re.escape, self.keys())))
def __call__(self, match):
"""Handler invoked for each regex match"""
return self[match.group(0)]
def xlate(self, text):
"""Translate text, returns the modified text"""
return self._make_regex().sub(self, text)

def _transposeDict(d): # returns a dict with key value transposed
nd = {}
for (k,v) in d.items():
nd[v]=k
return nd

#Unicode to HK
DICT_UNI_HK = {'ā':'A','Ā':'A','ī':'I','Ī':'I','ū':'U','Ū':'U',\
'ṛ':'R','Ṛ':'R','ṝ':'RR','ḷ':'L','Ḷ':'L','ḹ':'LL',\
'ṃ':'M','Ṃ':'M','ḥ':'H','Ḥ':'H','ṅ':'G','Ṅ':'G',\
'ñ':'J','Ñ':'J','ṭ':'T','Ṭ':'T','ḍ':'D','Ḍ':'D',\
'ṇ':'N','Ṇ':'N','ś':'z','Ś':'z','ṣ':'S','Ṣ':'S',
}

def x_UNI_to_HK(in_str_UNI): # input:
xlator_Obj = Xlator(DICT_UNI_HK)
return xlator_Obj.xlate(in_str_UNI)

def x_HK_to_UNI(in_str_UNI):
DICT_HK_UNI = dict (zip(DICT_UNI_HK.values(),DICT_UNI_HK.keys()))
xlator_Obj = Xlator(DICT_HK_UNI)
return xlator_Obj.xlate(in_str_UNI)

最佳答案

尽管您的主代码具有 from __future__ import unicode_literals 您的 xliterator.py 脚本将使用 Python 2.x 语法进行解释。

您发现将默认编码设置为 UTF-8 可以解决您的问题,这意味着 Python 很难与 xliterator.py 中编码的 UTF-8 进行比较和转换。 Django 可能会为您提供 Unicode 字符串,但您还没有告诉 Python 如何在(字节)字符串和 Unicode 字符串之间进行转换。

解决此问题的最简单方法是将 from __future__ import unicode_literals 添加到 xliterator.py,以便所有字符串都变成 Unicode 字符串。

另外,在 xliterator.py 顶部添加 #coding: utf-8 将确保您的 UTF-8 源代码正确解码为 Unicode 字符串。

关于python - 应用 unicode 过滤器时,Django 字符串在模板中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com