[sync] [patch] Re: Charset problems when syncing SE W880i calendar

munzli munzli at olmero.ch
Thu Aug 30 17:44:38 UTC 2007


hi

the problem with solving it like this is that sunbird/lightning starts 
to get errors after using a nokia to sync.
would be great if somebody could make a fix.

thanks a bunch


Bjørn Mork wrote:
> Bjørn Mork <bjorn at mork.no> writes:
>   
>> Karsten Fourmont <fourmont at gmx.de> writes:
>>
>>     
>>> But this hints in the direction that iso-8559-1 is the default when
>>> using quoted printable for the old non rfc VCALENDAR1.0 format.
>>> I put an according patch into cvs (iCalendar module).
>>>
>>> Please give it a try.
>>>       
>> Hmm, can't get it to work.  Will do some further testing.
>>     
>
>
> I tried commenting out the "isOldFormat()" test, just to verify that
> the fix should have worked:
>
>                 // Charset and encoding handling.
>                 if ((isset($params['ENCODING'])
>                      && String::upper($params['ENCODING']) == 'QUOTED-PRINTABLE')
>                     || isset($params['QUOTED-PRINTABLE'])) {
>
>                     $value = quoted_printable_decode($value);
>                     if (isset($params['CHARSET'])) {
>                         $value = String::convertCharset($value, $params['CHARSET']);
>                     } else {
>                         // Assume utf8 as default for vcalendar 2.0 and
>                         // vcard 3.0, iso-8559-1 otherwise.
>                   //      if ($this->isOldFormat()) {
>                             $value = String::convertCharset($value, 'iso-8859-1');
>                   //      } else {
>                   //          $value = String::convertCharset($value, 'utf-8');
>                   //      }
>                     }
>                 }
>
>
> And it did work, of course.
>
> So my next question was:  Why isn't isOldFormat() true for these
> vcalendar objects?  I tried following the logic setting it, and found
> that it is supposed to default to true if $this->_version < 2 (for
> vCalendars anyway).  
>
> The problem is that _version is not set by the time the vEvent
> subcomponent is parsed, because parsevCalendar() does
>
>   1) handle VTIMEZONE subcomponents
>   2) handle other subcomponents
>   3) handle attributes
>
>
> I.e., the vCalendar object looks like:
>
> BEGIN:VCALENDAR
> VERSION:1.0
> BEGIN:VEVENT
> DTSTART:20070821T210000Z
> DTEND:20070821T213000Z
> DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Laget av Bj=F8rn
> SUMMARY;ENCODING=QUOTED-PRINTABLE:Test =F8 test
> LOCATION;ENCODING=QUOTED-PRINTABLE:P=E5 B=F8
> LAST-MODIFIED:20070821T211243Z
> X-SONYERICSSON-DST:4
> X-IRMC-LUID:00000000005B
> END:VEVENT
> END:VCALENDAR
>
> but it will be parsed like
>
> BEGIN:VCALENDAR
> BEGIN:VEVENT
> DTSTART:20070821T210000Z
> DTEND:20070821T213000Z
> DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Laget av Bj=F8rn
> SUMMARY;ENCODING=QUOTED-PRINTABLE:Test =F8 test
> LOCATION;ENCODING=QUOTED-PRINTABLE:P=E5 B=F8
> LAST-MODIFIED:20070821T211243Z
> X-SONYERICSSON-DST:4
> X-IRMC-LUID:00000000005B
> END:VEVENT
> VERSION:1.0
> END:VCALENDAR
>
>
>
> I believe the special handling of VTIMEZONE is solving only half the
> problem.  Composite objects should really be parsed like this
>
>   1) handle attributes
>   2) handle VTIMEZONE subcomponents
>   3) handle other subcomponents
>
> Since _any_ attribute of the container object could affect the
> subcomponents, couldn't it?  Otherwise they wouldn't have any meaning,
> IMHO.
>
> I don't have the faintest clue about php, but the attached diff seems to
> work for me.  There are probably far more elegant ways of solving this.
>
>
> Bjørn
>
>   



More information about the sync mailing list