diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-04-27 17:13:43 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2011-06-06 17:20:16 +0200 |
commit | 668726dbd7063ef8c17bd27054acfd37343b2f29 (patch) | |
tree | 6d318ce8cd0549918ef3b8461dcb5bb930416c0f /src | |
parent | 1e507824c62b7c512f57109ff9b0d395f7d2429f (diff) |
charsets: new utf8_to_hex() method
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-charsets.c | 31 | ||||
-rw-r--r-- | src/mm-charsets.h | 5 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/mm-charsets.c b/src/mm-charsets.c index cbdf3885..708dd3e1 100644 --- a/src/mm-charsets.c +++ b/src/mm-charsets.c @@ -177,6 +177,37 @@ mm_modem_charset_hex_to_utf8 (const char *src, MMModemCharset charset) return converted; } +char * +mm_modem_charset_utf8_to_hex (const char *src, MMModemCharset charset) +{ + gsize converted_len = 0; + char *converted; + const char *iconv_to; + GError *error = NULL; + + g_return_val_if_fail (src != NULL, NULL); + g_return_val_if_fail (charset != MM_MODEM_CHARSET_UNKNOWN, NULL); + + iconv_to = charset_iconv_from (charset); + g_return_val_if_fail (iconv_to != NULL, FALSE); + + if (charset == MM_MODEM_CHARSET_UTF8 || charset == MM_MODEM_CHARSET_IRA) + return g_strdup (src); + + converted = g_convert (src, strlen (src), + iconv_to, "UTF-8//TRANSLIT", + NULL, &converted_len, &error); + if (!converted || error) { + g_clear_error (&error); + g_free (converted); + converted = NULL; + } else { + /* Get hex representation of the string */ + converted = utils_bin2hexstr ((guint8 *)converted, converted_len); + } + + return converted; +} /* GSM 03.38 encoding conversion stuff */ diff --git a/src/mm-charsets.h b/src/mm-charsets.h index 50b0ccef..d620b157 100644 --- a/src/mm-charsets.h +++ b/src/mm-charsets.h @@ -48,6 +48,11 @@ gboolean mm_modem_charset_byte_array_append (GByteArray *array, */ char *mm_modem_charset_hex_to_utf8 (const char *src, MMModemCharset charset); +/* Take a string in UTF-8 and convert it to the given charset in hex + * representation. + */ +char *mm_modem_charset_utf8_to_hex (const char *src, MMModemCharset charset); + guint8 *mm_charset_utf8_to_unpacked_gsm (const char *utf8, guint32 *out_len); guint8 *mm_charset_gsm_unpacked_to_utf8 (const guint8 *gsm, guint32 len); |