• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: Commit

変愚蛮怒のメインリポジトリです


Commit MetaInfo

Revisionf383c36f86cb0a275beeca1d7a1cb51ae36d0688 (tree)
Time2014-02-28 21:30:30
AuthorHabu <habu@user...>
CommiterHabu

Log Message

utf8_to_sysにUNIX用の UTF-8 -> EUC-JP 変換を実装

Change Summary

Incremental Difference

--- a/src/japanese.c
+++ b/src/japanese.c
@@ -396,6 +396,11 @@ static bool is_utf8_str(cptr str)
396396 return TRUE;
397397 }
398398
399+#if defined(EUC)
400+#include <iconv.h>
401+#elif defined(SJIS) && defined(WINDOWS)
402+#include <Windows.h>
403+#endif
399404 /*!
400405 * @brief 文字コードがUTF-8の文字列をシステムの文字コードに変換する
401406 * @param utf8_str 変換するUTF-8の文字列へのポインタ
@@ -403,11 +408,19 @@ static bool is_utf8_str(cptr str)
403408 * @param sys_str_buflen 変換したシステムの文字コードの文字列を格納するバッファの長さ
404409 * @return 変換に成功した場合TRUE、失敗した場合FALSEを返す
405410 */
406-#ifdef SJIS
407-#ifdef WINDOWS
408-#include <Windows.h>
409-static bool utf8_to_sys(cptr utf8_str, char* sys_str_buffer, size_t sys_str_buflen)
411+static bool utf8_to_sys(char* utf8_str, char* sys_str_buffer, size_t sys_str_buflen)
410412 {
413+#if defined(EUC)
414+
415+ iconv_t cd = iconv_open("EUC-JP", "UTF-8");
416+ size_t utf8_len = strlen(utf8_str) + 1; /* include termination character */
417+ char *from = utf8_str;
418+ int ret = iconv(cd, &from, &utf8_len, &sys_str_buffer, &sys_str_buflen);
419+ iconv_close(cd);
420+ return (ret >= 0);
421+
422+#elif defined(SJIS) && defined(WINDOWS)
423+
411424 LPWSTR utf16buf;
412425 int input_len = strlen(utf8_str) + 1; /* include termination character */
413426
@@ -416,9 +429,9 @@ static bool utf8_to_sys(cptr utf8_str, char* sys_str_buffer, size_t sys_str_bufl
416429 /* UTF-8 -> UTF-16 */
417430 if (MultiByteToWideChar( CP_UTF8, 0, utf8_str, input_len, utf16buf, input_len) == 0) {
418431 C_KILL(utf16buf, input_len, WCHAR);
419- return FALSE;
432+ return FALSE;
420433 }
421-
434+
422435 /* UTF-8 -> SJIS(CP932) */
423436 if (WideCharToMultiByte( CP_ACP, 0, utf16buf, -1, sys_str_buffer, sys_str_buflen, NULL, NULL ) == 0) {
424437 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
427440
428441 C_KILL(utf16buf, input_len, WCHAR);
429442 return TRUE;
430-}
431-#endif
443+
432444 #endif
445+}
433446
434447 /*!
435448 * @brief 受け取った文字列の文字コードを推定し、システムの文字コードへ変換する
Show on old repository browser