On Thursday, March 31, 2011 6:51:20 AM UTC+2, Bob Tanner wrote:
> I must be missing something simple or fundamental when it comes to TG2 and 
> Unicode. Every time I step out of the ASCII world the UnicodeDecodeError hits 
> me.
> 
> 
> The table as dumped from MySQL
> 
> 
> 
> --
> -- Table structure for table `resourceitem`
> --
> 
> 
> DROP TABLE IF EXISTS `resourceitem`;
> /*!40101 SET @saved_cs_client     = @@character_set_client */;
> /*!40101 SET character_set_client = utf8 */;
> CREATE TABLE `resourceitem` (
>   `resourceid` binary(16) NOT NULL,
>   `item` int(11) NOT NULL,
>   `description` text,
>   `title` varchar(2000) DEFAULT NULL,
>   `publisher` varchar(2000) DEFAULT NULL,
>   `creator` varchar(2000) DEFAULT NULL,
>   `language` varchar(10) DEFAULT NULL,
>   `identifier` varchar(127) DEFAULT NULL,
>   `thumbnailurl` varchar(254) DEFAULT NULL,
>   `format` varchar(40) DEFAULT NULL,
>   `src` varchar(254) DEFAULT NULL,
>   `downloadtype` varchar(20) DEFAULT NULL,
> 
>   UNIQUE KEY `resourceitem_resourceid` (`resourceid`,`item`),
>   KEY `resourceitem_creator` (`creator`(255)),
>   KEY `resourceitem_title` (`title`(255)),
>   KEY `resourceitem_thumbnailurl` (`thumbnailurl`),
>   KEY `resourceitem_identifier` (`identifier`),
>   KEY `resourceitem_src` (`src`),
>   KEY `resourceitem_publisher` (`publisher`(255)),
>   CONSTRAINT `resourceitem_ibfk_1` FOREIGN KEY (`resourceid`) REFERENCES 
> `resourcekey` (`resourceid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
> /*!40101 SET character_set_client = @saved_cs_client */;
> 
> 
> The TG2 model
> 
> 
> 
> # -*- coding: utf-8 -*-
> """ResourceItem model module."""
> 
> 
> from sqlalchemy import Column, Integer, String, Text, ForeignKey, 
> LargeBinary, Unicode, UnicodeText, Table
> from sqlalchemy.orm import relation
> from reports.model import DeclarativeBase
> 
> 
> __all__ = ['ResourceItemMode']
> 
> 
> class ResourceItemModel(DeclarativeBase):
>     __tablename__ = 'resourceitem'
>     
>     resourceid = Column(LargeBinary(16), nullable=False, primary_key=True)
>     item = Column(Integer(11), nullable=False, primary_key=True)
>     description = Column(Text, nullable=True)
>     title = Column(Unicode(2000), nullable=True)
>     publisher = Column(Unicode(2000), nullable=True)
>     creator = Column(Unicode(2000), nullable=True)
>     language = Column(Unicode(10), nullable=True)
>     identifier = Column(Unicode(127), nullable=True)
>     thumbnailurl = Column(Unicode(254), nullable=True)
>     format = Column(Unicode(40), nullable=True)
>     src = Column(String(254), nullable=True)
>     downloadtype = Column(Unicode(20), nullable=True)
> 
> 
> One of the creators is Antoine de 
> Saint-Exupéry <http://en.wikipedia.org/wiki/Antoine_de_Saint-Exup%C3%A9ry> 
> and when I do a mysql comment line query I get this:
> 
> 
> 
> mysql> select creator   from resourceitem where creator like '%Antoine%' ;
> +---------------------------+
> | creator                   |
> +---------------------------+
> | Saint-Exupéry, Antoine de |
> +---------------------------+
> 1 row in set (0.00 sec)
> 
> 
> Looks properly decoded and display. I set up a simple CrudRestController and 
> did the boiler plate TG2 code:
> 
> 
> 
> class ResourceItemController(CrudRestController):
>     model = ResourceItemModel
>     
>     class new_form_type(AddRecordForm):
>         __model__ = ResourceItemModel
> 
> 
>     class edit_form_type(EditableForm):
>         __model__ = ResourceItemModel
>         
>     class edit_filler_type(EditFormFiller):
>         __model__ = ResourceItemModel
>         
>     class table_type(TableBase):
>         __model__ = ResourceItemModel
>         
>     class table_filler_type(TableFiller):
>         __model__ = ResourceItemModel
>         __omit_fields__ = ['__actions__']       
> 
> 
> 
> class RootController(BaseController):
>     secc = SecureController()
>     admin = AdminController(model, DBSession, config_type=TGAdminConfig)
>     error = ErrorController()
> 
> 
>     resource_items = ResourceItemController(DBSession)
> 
> 
> Open web browser to http://127.0.0.1:8080/resource_items/ I get a Server 
> Error, the dreaded UnicodeDecodeError on Antoine de Saint-Exupéry name.
> 
> 
> 
> I'm not sure what I did wrong.
> 
> 
> Is the default template from sprox not <meta content="text/html; 
> charset=UTF-8"/> by chance?
> 
> 
> Any recommendations on how I can resolve my UnicodeDecodeError?
> 
> 
> Thanks.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> --
> Bob Tanner <[email protected]>                 | Phone : 952-943-8700
> http://www.real-time.com, Linux, OSX, VMware | Fax      : 952-943-8500
> Key fingerprint = F785 DDFC CF94 7CE8 AA87 3A9D 3895 26F1 0DDB E378

Listen I have been on this same problem it's not genshi or anython it's python 
itself just find the site.py in the python/Lib/site.py and look for 

def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "ascii" # Default value set by _PyUnicode_Init()


you see the encoding = "ascii" change to look like this encoding = "utf-8" and 
the whole problem is gone. 

Yes the solution is that EASY

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/turbogears/-/Fww_2zbBn-UJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to