Plone网站:如何在我的plone页面上正确显示特殊字符?

时间:2014-07-02 15:26:32

标签: python character plone

我在我的内容类型的视图类中有一个返回字典的函数。该字典包含从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>

如何制作才能使特殊字符正确显示?

提前谢谢。

2 个答案:

答案 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>
...

有关详情,请参阅https://docs.python.org/2/howto/unicode.html