我在我的内容类型的视图类中有一个返回字典的函数。该字典包含从mysql后端数据库中检索的值(使用UTF-8编码)。
其中一个字段包含一个特殊字符(与e结合使用),但呈现为带有问号的"菱形"。
以下是我如何构建我在函数中返回的字典:
assetDetails = Session.execute("CALL getAssetDetails("+self.assetID+");").fetchone()
return dict(assetID=assetDetails[0],
gpclAssetID=assetDetails[1],
assetType=assetDetails[2],
assetDescription=assetDetails[3],
supplierName=assetDetails[4],
model=assetDetails[5],
serialNumber=assetDetails[6],
status=assetDetails[7],
location=assetDetails[8],
options=assetDetails[9])
在我的模板文件中,html标记为:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="gpcl.assets">
我在这个div中显示信息:
<div tal:define="asset view/getAssetDetails">
<div tal:content="asset/assetID"></div>
<div tal:content="asset/gpclAssetID"></div>
<div tal:content="asset/assetType"></div>
<div tal:content="asset/assetDescription"></div>
<div tal:content="asset/supplierName"></div>
<div tal:content="asset/model"></div>
<div tal:content="asset/serialNumber"></div>
<div tal:content="asset/status"></div>
<div tal:content="asset/location"></div>
<div tal:content="asset/options"></div>
</div>
如何制作才能使特殊字符正确显示?
提前谢谢。
答案 0 :(得分:3)
我会将您的数据转换为unicode,以确保安全:
from Products.CMFPlone.utils import safe_unicode
...
return dict(assetID=safe_unicode(assetDetails[0]),
gpclAssetID=safe_unicode(assetDetails[1]),
assetType=safe_unicode(assetDetails[2]),
...
默认情况下, safe_unicode使用'uft-8',但可以告诉他们使用不同的字符集来解码你的字符串:safe_unicode('some text', 'latin-1')
答案 1 :(得分:2)
如果你的字符串是真的 UTF-8编码的8位字符串,你可以简单地使用Python .decode
函数。
<div tal:define="asset view/getAssetDetails">
<div tal:content="python:asset.assetID.decode('utf-8')"></div>
...