diff -urN unzip60-orig/fileio.c unzip60/fileio.c
--- unzip60-orig/fileio.c	2009-04-20 09:03:44.000000000 +0900
+++ unzip60/fileio.c	2010-06-19 18:25:05.000000000 +0900
@@ -2240,10 +2240,39 @@
 
         /* translate the Zip entry filename coded in host-dependent "extended
            ASCII" into the compiler's (system's) internal text code page */
+		/*
         Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver,
                             G.pInfo->HasUxAtt, (option == DS_FN_L));
+		*/
+        /* translate the Zip entry filename code to set utf-8 */
+#include <iconv.h>
 
-        if (G.pInfo->lcflag)      /* replace with lowercase filename */
+#define ICONV_BUF_SIZE 260
+		size_t ileft, oleft;
+		iconv_t cd;
+		size_t iconv_result;
+		size_t size;
+		char inbuf[ICONV_BUF_SIZE];
+		char outbuf[ICONV_BUF_SIZE];
+		char *inptr = inbuf;
+		char *outptr = outbuf;
+
+		size = strlen(G.filename)+1;
+		strncpy(inbuf, G.filename, size);
+		ileft = size;
+		oleft = sizeof(outbuf);
+
+		cd = iconv_open("UTF-8", "UHC");
+
+		iconv_result = iconv(cd, &inptr, &ileft, &outptr, &oleft);
+
+
+		outbuf[ICONV_BUF_SIZE-oleft] = 0;
+		strcpy(G.filename, outbuf);
+
+		iconv_close(cd);
+
+		if (G.pInfo->lcflag)      /* replace with lowercase filename */
             STRLOWER(G.filename, G.filename);
 
         if (G.pInfo->vollabel && length > 8 && G.filename[8] == '.') {

