From f383c36f86cb0a275beeca1d7a1cb51ae36d0688 Mon Sep 17 00:00:00 2001 From: Habu Date: Fri, 28 Feb 2014 21:09:04 +0900 Subject: [PATCH] =?utf8?q?utf8=5Fto=5Fsys=E3=81=ABUNIX=E7=94=A8=E3=81=AE?= =?utf8?q?=20UTF-8=20->=20EUC-JP=20=E5=A4=89=E6=8F=9B=E3=82=92=E5=AE=9F?= =?utf8?q?=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/japanese.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/japanese.c b/src/japanese.c index 9e604ee4b..0ee827aa4 100644 --- a/src/japanese.c +++ b/src/japanese.c @@ -396,6 +396,11 @@ static bool is_utf8_str(cptr str) return TRUE; } +#if defined(EUC) +#include +#elif defined(SJIS) && defined(WINDOWS) +#include +#endif /*! * @brief ʸ»ú¥³¡¼¥É¤¬UTF-8¤Îʸ»úÎó¤ò¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë * @param utf8_str ÊÑ´¹¤¹¤ëUTF-8¤Îʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿ @@ -403,11 +408,19 @@ static bool is_utf8_str(cptr str) * @param sys_str_buflen ÊÑ´¹¤·¤¿¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤Îʸ»úÎó¤ò³ÊǼ¤¹¤ë¥Ð¥Ã¥Õ¥¡¤ÎŤµ * @return ÊÑ´¹¤ËÀ®¸ù¤·¤¿¾ì¹çTRUE¡¢¼ºÇÔ¤·¤¿¾ì¹çFALSE¤òÊÖ¤¹ */ -#ifdef SJIS -#ifdef WINDOWS -#include -static bool utf8_to_sys(cptr utf8_str, char* sys_str_buffer, size_t sys_str_buflen) +static bool utf8_to_sys(char* utf8_str, char* sys_str_buffer, size_t sys_str_buflen) { +#if defined(EUC) + + iconv_t cd = iconv_open("EUC-JP", "UTF-8"); + size_t utf8_len = strlen(utf8_str) + 1; /* include termination character */ + char *from = utf8_str; + int ret = iconv(cd, &from, &utf8_len, &sys_str_buffer, &sys_str_buflen); + iconv_close(cd); + return (ret >= 0); + +#elif defined(SJIS) && defined(WINDOWS) + LPWSTR utf16buf; int input_len = strlen(utf8_str) + 1; /* include termination character */ @@ -416,9 +429,9 @@ static bool utf8_to_sys(cptr utf8_str, char* sys_str_buffer, size_t sys_str_bufl /* UTF-8 -> UTF-16 */ if (MultiByteToWideChar( CP_UTF8, 0, utf8_str, input_len, utf16buf, input_len) == 0) { C_KILL(utf16buf, input_len, WCHAR); - return FALSE; + return FALSE; } - + /* UTF-8 -> SJIS(CP932) */ if (WideCharToMultiByte( CP_ACP, 0, utf16buf, -1, sys_str_buffer, sys_str_buflen, NULL, NULL ) == 0) { C_KILL(utf16buf, input_len, WCHAR); @@ -427,9 +440,9 @@ static bool utf8_to_sys(cptr utf8_str, char* sys_str_buffer, size_t sys_str_bufl C_KILL(utf16buf, input_len, WCHAR); return TRUE; -} -#endif + #endif +} /*! * @brief ¼õ¤±¼è¤Ã¤¿Ê¸»úÎó¤Îʸ»ú¥³¡¼¥É¤ò¿äÄꤷ¡¢¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤ØÊÑ´¹¤¹¤ë -- 2.11.0