Hi Guillaume, On 07/16/2012 09:34 AM, Guillaume Zajac wrote: > --- > src/util.c | 17 ++++++++++++++--- > 1 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/src/util.c b/src/util.c > index aecc790..41ef3d4 100644 > --- a/src/util.c > +++ b/src/util.c > @@ -628,8 +628,16 @@ char *convert_gsm_to_utf8_with_lang(const unsigned char *text, long len, > > c = gsm_single_shift_lookup(&t, text[i]); > > + /* > + * According to the 3GPP specifications 23.038 > + * section 6.2.1.1: > + * In the case there is no character in the extension > + * table, the character of the main default alphabet > + * table or the character from the National Language > + * Locking Shift Table should be displayed. > + */ What version of 23.038 are you using? I cannot find such wording in R9 or R10 specs. > if (c == GUND) > - goto error; > + c = gsm_locking_shift_lookup(&t, text[i]); > } else { > c = gsm_locking_shift_lookup(&t, text[i]); > } > @@ -647,9 +655,12 @@ char *convert_gsm_to_utf8_with_lang(const unsigned char *text, long len, > while (out< res + res_length) { > unsigned short c; > > - if (text[i] == 0x1b) > + if (text[i] == 0x1b) { > c = gsm_single_shift_lookup(&t, text[++i]); > - else > + /* See 3GPP 23.038 section 6.2.1.1 */ > + if (c == GUND) > + c = gsm_locking_shift_lookup(&t, text[i]); > + } else > c = gsm_locking_shift_lookup(&t, text[i]); > > out += g_unichar_to_utf8(c, out); Regards, -Denis