[Matplotlib-devel] Python 2.7 build failing due to Unicode characters...

Jody Klymak jklymak at uvic.ca
Mon Sep 11 17:00:18 EDT 2017


Hi Chris,

We (they) are fixing it, though it quickly got out of my depth…  If 
you had any suggestions for them, I’m sure they would listen.  They 
are actively interested in addressing this.

https://github.com/nucleic/kiwi/pull/40

Thanks!   Jody



On 11 Sep 2017, at 13:56, Chris Barker wrote:

> On Fri, Sep 8, 2017 at 2:11 PM, Jody Klymak <jklymak at uvic.ca> wrote:
>
>> Unfortunately, that is the problem. kiwi, which is written in CPP, 
>> has a
>> check for python version:
>>
>> #if PY_MAJOR_VERSION >= 3
>> #define FROM_STRING PyUnicode_FromString
>> #else
>> #define FROM_STRING PyString_FromString
>> #endif
>>
>> ouch! IMHO, they made a major mistake here -- they should have used
> Unicode in both versions, and cast a py2 string to unicode if need be.
>
>> So it can handle Unicode, but has no way to know it *should* handle
>> Unicode if we are using python 2.7 and unicode_literals.
>>
>
> actually, this looks like it can't handle unicode in the CPP code 
> under py2
> at all :-(
>
>> I’ve opened an issue with them,
>> <https://github.com/nucleic/kiwi/issues/39> though of course if 
>> someone
>> here had expertise in this it’d be very helpful. Worst case 
>> scenario I can
>> just cast every call to str, it just makes the code a bit of a mess.
>>
> unless they change the cpp, I think you'll have to do that. Then 
> prepare
> yourself for mysterious encoding errors to pop up later on ....
>
> :-(
>
> -CHB
>
>
>> Now, whether or not this would fix your problem or not, I haven't a 
>> clue.
>>
>> the error is:
> TypeError: Expected object of typefloat,
> int, or long. Got object of type unicode instead.
>
> are you sure this is a unicode instead of string problem? MAybe you 
> need to
> call float() or int() on the value before passing it in.
>
> -CHB
>
>> Am I supposed to put # -*- coding: utf-8 -*- at the top of every 
>> source
>> that might create a string that calls these functions?
>>
>> that will make no difference.
>
>> Or should I convert
>> the string somehow in my wrappers before passing down?
>>
>> yeah, probably.
>
>> Or does from
>> __future__ import unicode_literals do this?
>>
>> what that does is make text literals, like:
>
> "this is some  text"
>
> a unicode object, rather than a py2string object -- but if the string 
> comes
> from somewhere else, it makes no difference.
>
> But if that IS in the source, then you will get a lot more unicode 
> objects
> getting passed around.
>
> -CHB
>
> -- 
>
> Christopher Barker, Ph.D.
> Oceanographer
>
> Emergency Response Division
> NOAA/NOS/OR&R            (206) 526-6959   voice
> 7600 Sand Point Way NE   (206) 526-6329   fax
> Seattle, WA  98115       (206) 526-6317   main reception
>
> Chris.Barker at noaa.gov


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-devel/attachments/20170911/a0176bed/attachment-0001.html>


More information about the Matplotlib-devel mailing list