replay get form stewgate
Dependencies: EthernetNetIf NetServices mbed
Fork of HTTPClientExample by
utf8tosjis.c@4:a81d4a6f6e29, 2013-08-31 (annotated)
- Committer:
- nameless129
- Date:
- Sat Aug 31 07:55:46 2013 +0000
- Revision:
- 4:a81d4a6f6e29
reply get from stewgate
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nameless129 | 4:a81d4a6f6e29 | 1 | #include <stdio.h> |
nameless129 | 4:a81d4a6f6e29 | 2 | #include <stdlib.h> |
nameless129 | 4:a81d4a6f6e29 | 3 | #include <locale.h> |
nameless129 | 4:a81d4a6f6e29 | 4 | #include <cwchar> |
nameless129 | 4:a81d4a6f6e29 | 5 | |
nameless129 | 4:a81d4a6f6e29 | 6 | int utf8tosjis(const char* utfBuffer, int utfBufLen, char* sjisBuffer, int sjisBufLen) |
nameless129 | 4:a81d4a6f6e29 | 7 | { |
nameless129 | 4:a81d4a6f6e29 | 8 | wchar_t wstr[256]; |
nameless129 | 4:a81d4a6f6e29 | 9 | int i, wi; |
nameless129 | 4:a81d4a6f6e29 | 10 | wchar_t wc; |
nameless129 | 4:a81d4a6f6e29 | 11 | mbstate_t state = {0}; |
nameless129 | 4:a81d4a6f6e29 | 12 | size_t ret; |
nameless129 | 4:a81d4a6f6e29 | 13 | char * current_locale; |
nameless129 | 4:a81d4a6f6e29 | 14 | i = wi = 0; |
nameless129 | 4:a81d4a6f6e29 | 15 | |
nameless129 | 4:a81d4a6f6e29 | 16 | current_locale = setlocale(LC_CTYPE, "UTF-8"); |
nameless129 | 4:a81d4a6f6e29 | 17 | if (current_locale == NULL) |
nameless129 | 4:a81d4a6f6e29 | 18 | return 0; |
nameless129 | 4:a81d4a6f6e29 | 19 | |
nameless129 | 4:a81d4a6f6e29 | 20 | while (1) { |
nameless129 | 4:a81d4a6f6e29 | 21 | ret = mbrtowc(&wc, utfBuffer+i, 3, &state); |
nameless129 | 4:a81d4a6f6e29 | 22 | if (ret == (size_t)-2 || ret == (size_t)-1) { |
nameless129 | 4:a81d4a6f6e29 | 23 | printf("\nThere was a problem decoding the multibyte string.\n"); |
nameless129 | 4:a81d4a6f6e29 | 24 | return ret; |
nameless129 | 4:a81d4a6f6e29 | 25 | } else if (ret == 0) { |
nameless129 | 4:a81d4a6f6e29 | 26 | break; /* we hit \0, end of string */ |
nameless129 | 4:a81d4a6f6e29 | 27 | } else { |
nameless129 | 4:a81d4a6f6e29 | 28 | i += ret; |
nameless129 | 4:a81d4a6f6e29 | 29 | wstr[wi++] = wc; |
nameless129 | 4:a81d4a6f6e29 | 30 | } |
nameless129 | 4:a81d4a6f6e29 | 31 | } |
nameless129 | 4:a81d4a6f6e29 | 32 | wstr[wi] = L'\0'; |
nameless129 | 4:a81d4a6f6e29 | 33 | |
nameless129 | 4:a81d4a6f6e29 | 34 | current_locale = setlocale(LC_CTYPE, "SJIS"); |
nameless129 | 4:a81d4a6f6e29 | 35 | if (current_locale == NULL) |
nameless129 | 4:a81d4a6f6e29 | 36 | return 0; |
nameless129 | 4:a81d4a6f6e29 | 37 | |
nameless129 | 4:a81d4a6f6e29 | 38 | ret = wcstombs(sjisBuffer, wstr, sjisBufLen); |
nameless129 | 4:a81d4a6f6e29 | 39 | |
nameless129 | 4:a81d4a6f6e29 | 40 | return ret; |
nameless129 | 4:a81d4a6f6e29 | 41 | } |