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:03:55 2013 +0000
Revision:
0:1215a9611188
Child:
1:9bd53bc5ff51
Initial release

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 0:1215a9611188 19
MACRUM 0:1215a9611188 20 i = wi = 0;
MACRUM 0:1215a9611188 21
MACRUM 0:1215a9611188 22 while (1) {
MACRUM 0:1215a9611188 23 ret = mbrtowc(&wc, utfBuffer+i, 3, &state);
MACRUM 0:1215a9611188 24 if (ret == (size_t)-2 || ret == (size_t)-1) {
MACRUM 0:1215a9611188 25 printf("\nThere was a problem decoding the multibyte string.\n");
MACRUM 0:1215a9611188 26 return ret;
MACRUM 0:1215a9611188 27 } else if (ret == 0) {
MACRUM 0:1215a9611188 28 break; /* we hit \0, end of string */
MACRUM 0:1215a9611188 29 } else {
MACRUM 0:1215a9611188 30 i += ret;
MACRUM 0:1215a9611188 31 wstr[wi++] = wc;
MACRUM 0:1215a9611188 32 }
MACRUM 0:1215a9611188 33 }
MACRUM 0:1215a9611188 34 wstr[wi] = L'\0';
MACRUM 0:1215a9611188 35 return ret;
MACRUM 0:1215a9611188 36 }
MACRUM 0:1215a9611188 37
MACRUM 0:1215a9611188 38 int main() {
MACRUM 0:1215a9611188 39 int err = 0;
MACRUM 0:1215a9611188 40 err = utf8tosjis(buf_u, 29, buf_s, sizeof(buf_s));
MACRUM 0:1215a9611188 41 return 0;
MACRUM 0:1215a9611188 42 }