UTF-8 to SJIS conversion

Dependencies:   mbed

This example program converts UTF-8 code to Shift-JIS code.

Committer:
MACRUM
Date:
Sat Aug 24 15:10:43 2013 +0000
Revision:
1:9bd53bc5ff51
Parent:
0:1215a9611188
Child:
2:43bc6ceb9ae5
Added setlocale() call

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:1215a9611188 1 #include "mbed.h"
MACRUM 0:1215a9611188 2 #include <locale.h>
MACRUM 0:1215a9611188 3 #include <cwchar>
MACRUM 0:1215a9611188 4
MACRUM 0:1215a9611188 5 #pragma import __use_all_ctype
MACRUM 0:1215a9611188 6
MACRUM 0:1215a9611188 7 DigitalOut myled(LED1);
MACRUM 0:1215a9611188 8
MACRUM 0:1215a9611188 9 static char buf_s[1024];
MACRUM 0:1215a9611188 10 static char buf_u[1024] = {0xE6,0x97,0xA5,0xE6,0x9C,0xAC,0xE8,0xAA,0x9E,0xE6,0x96,0x87,0xE5,0xAD,0x97,0xE5,0x88,0x97,0x5F,0x41,0x42,0x43,0x44,0x5F,0x30,0x31,0x32,0x33,0x00};
MACRUM 0:1215a9611188 11 static wchar_t wstr[1024];
MACRUM 0:1215a9611188 12
MACRUM 0:1215a9611188 13 static int utf8tosjis(const char* utfBuffer, int utfBufLen, char* sjisBuffer, int sjisBufLen)
MACRUM 0:1215a9611188 14 {
MACRUM 0:1215a9611188 15 int i, wi;
MACRUM 0:1215a9611188 16 wchar_t wc;
MACRUM 0:1215a9611188 17 mbstate_t state = {0};
MACRUM 0:1215a9611188 18 size_t ret;
MACRUM 1:9bd53bc5ff51 19 char * current_locale;
MACRUM 1:9bd53bc5ff51 20 i = wi = 0;
MACRUM 0:1215a9611188 21
MACRUM 1:9bd53bc5ff51 22 current_locale = setlocale(LC_CTYPE, "UTF-8");
MACRUM 1:9bd53bc5ff51 23 if (current_locale != NULL) {
MACRUM 1:9bd53bc5ff51 24 printf("Current locale is : %s \n", current_locale);
MACRUM 1:9bd53bc5ff51 25 }
MACRUM 0:1215a9611188 26
MACRUM 0:1215a9611188 27 while (1) {
MACRUM 0:1215a9611188 28 ret = mbrtowc(&wc, utfBuffer+i, 3, &state);
MACRUM 0:1215a9611188 29 if (ret == (size_t)-2 || ret == (size_t)-1) {
MACRUM 0:1215a9611188 30 printf("\nThere was a problem decoding the multibyte string.\n");
MACRUM 0:1215a9611188 31 return ret;
MACRUM 0:1215a9611188 32 } else if (ret == 0) {
MACRUM 0:1215a9611188 33 break; /* we hit \0, end of string */
MACRUM 0:1215a9611188 34 } else {
MACRUM 0:1215a9611188 35 i += ret;
MACRUM 0:1215a9611188 36 wstr[wi++] = wc;
MACRUM 0:1215a9611188 37 }
MACRUM 0:1215a9611188 38 }
MACRUM 0:1215a9611188 39 wstr[wi] = L'\0';
MACRUM 0:1215a9611188 40 return ret;
MACRUM 0:1215a9611188 41 }
MACRUM 0:1215a9611188 42
MACRUM 0:1215a9611188 43 int main() {
MACRUM 0:1215a9611188 44 int err = 0;
MACRUM 0:1215a9611188 45 err = utf8tosjis(buf_u, 29, buf_s, sizeof(buf_s));
MACRUM 0:1215a9611188 46 return 0;
MACRUM 0:1215a9611188 47 }