diff -ruN xmms-scrobbler-0.3.8.1.org/Makefile.in xmms-scrobbler-0.3.8.1/Makefile.in
--- xmms-scrobbler-0.3.8.1.org/Makefile.in	2005-02-27 11:37:07.000000000 +0900
+++ xmms-scrobbler-0.3.8.1/Makefile.in	2005-03-14 17:42:47.000000000 +0900
@@ -78,7 +78,7 @@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
-LIBS = `curl-config --libs` -lmusicbrainz -lm -lstdc++
+LIBS = `curl-config --libs` -lmusicbrainz -lm -lstdc++ -ljconv
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
diff -ruN xmms-scrobbler-0.3.8.1.org/queue.c xmms-scrobbler-0.3.8.1/queue.c
--- xmms-scrobbler-0.3.8.1.org/queue.c	2005-02-21 04:10:28.000000000 +0900
+++ xmms-scrobbler-0.3.8.1/queue.c	2005-03-14 17:42:47.000000000 +0900
@@ -25,10 +25,25 @@
 void q_put(metatag_t *meta, int len)
 {
 	item_t *item;
+	char *euc=NULL; /* yaz */
+	char *utf=NULL;
+
+	/* yaz */
+	euc = jconv_strdup_conv_autodetect(meta->artist, "EUC-JP", NULL);
+	printf("yaz artist=%s\n", euc);
+	free(euc);
+	euc = jconv_strdup_conv_autodetect(meta->title, "EUC-JP", NULL);
+	printf("yaz title=%s\n", euc);
+	free(euc);
 		
 	item = malloc(sizeof(item_t));
-	item->artist = fmt_escape(meta->artist);
-	item->title = fmt_escape(meta->title);
+	utf = jconv_strdup_conv_autodetect(meta->artist, "UTF-8", NULL);
+	item->artist = fmt_escape(utf);
+	free(utf);
+	utf = jconv_strdup_conv_autodetect(meta->title, "UTF-8", NULL);
+	item->title = fmt_escape(utf);	
+	free(utf);
+
 	item->utctime = fmt_escape(fmt_timestr(time(NULL), 1));
 	snprintf(item->len, sizeof(item->len), "%d", len);
 	if(meta->mb == NULL)
diff -ruN xmms-scrobbler-0.3.8.1.org/tags/id3v1.c xmms-scrobbler-0.3.8.1/tags/id3v1.c
--- xmms-scrobbler-0.3.8.1.org/tags/id3v1.c	2005-02-21 04:11:01.000000000 +0900
+++ xmms-scrobbler-0.3.8.1/tags/id3v1.c	2005-03-14 17:49:55.000000000 +0900
@@ -31,6 +31,8 @@
 #include "include/unicode.h"
 #define BUFFER_SIZE 4096
 
+#include <jconv.h>
+
 static void cleanID3v1(unsigned char *data, size_t size)
 {
 	int i;
@@ -92,28 +94,36 @@
 		fread(data, 1, 30, fp);
 		cleanID3v1(data, 30);
 		// id3v1->title = realloc(id3v1->title, 31);
-		if(strcmp(data, ""))
-			iso88591_to_utf8(data, strlen(data), &id3v1->title);
+		if(strcmp(data, "")){
+//			iso88591_to_utf8(data, strlen(data), &id3v1->title);
+			id3v1->title = strndup(data, 30);
+		}
 		else
 			id3v1->title = NULL;
 		fread(data, 1, 30, fp);
 		cleanID3v1(data, 30);
-		if(strcmp(data, ""))
-			iso88591_to_utf8(data, strlen(data), &id3v1->artist);
+		if(strcmp(data, "")){
+//			iso88591_to_utf8(data, strlen(data), &id3v1->artist);
+			id3v1->artist = strndup(data, 30);
+		}
 		else
 			id3v1->artist = NULL;
 		fread(data, 1, 30, fp);
 		cleanID3v1(data, 30);
-		if(strcmp(data, ""))
-			iso88591_to_utf8(data, strlen(data), &id3v1->album);
+		if(strcmp(data, "")){
+//			iso88591_to_utf8(data, strlen(data), &id3v1->album);
+			id3v1->album = strndup(data, 30);
+		}
 		else
 			id3v1->album = NULL;
 		data = realloc(data, 5);
 		*(data + 4) = '\0';
 		fread(data, 1, 4, fp);
 		cleanID3v1(data, 4);
-		if(strcmp(data, ""))
-			iso88591_to_utf8(data, strlen(data), &id3v1->year);
+		if(strcmp(data, "")){
+//			iso88591_to_utf8(data, strlen(data), &id3v1->year);
+			id3v1->year = strndup(data, 4);
+		}
 		else
 			id3v1->year = NULL;
 		data = realloc(data, 31);
diff -ruN xmms-scrobbler-0.3.8.1.org/tags/id3v2.c xmms-scrobbler-0.3.8.1/tags/id3v2.c
--- xmms-scrobbler-0.3.8.1.org/tags/id3v2.c	2005-02-21 04:11:22.000000000 +0900
+++ xmms-scrobbler-0.3.8.1/tags/id3v2.c	2005-03-14 17:42:48.000000000 +0900
@@ -31,6 +31,8 @@
 #include "include/unicode.h"
 #define BUFFER_SIZE 4096
 
+#include <jconv.h>
+
 id3_lookup_t id3v22_lookup[] = 
 {
 	{"BUF", ID3V22_BUF}, {"CNT", ID3V22_CNT}, {"COM", ID3V22_COM}, 
@@ -410,28 +412,32 @@
 			framedata->len -= unsync->count;
 			free(unsync);
 		}
-		if(encoding == 0x00)
+		if(encoding == 0x00) //iso8859-1
 		{
+			printf("yaz encoding=00\n");
 			if(utf != NULL)
 				free(utf);
-			iso88591_to_utf8(data, framedata->len - 1, &utf);
+			utf = jconv_strdup_conv_autodetect(data, "UTF-8", "ISO-8859-1 UTF-8");
 		}
-		else if(encoding == 0x01)
+		else if(encoding == 0x01) //UTF-16 with BOM
 		{
+			printf("yaz encoding=01\n");
 			if(utf != NULL)
 				free(utf);
-			utf16bom_to_utf8(data, framedata->len - 1, &utf);
+			utf = jconv_strdup_conv_autodetect(data, "UTF-8", "UTF-16");
 		}
-		else if(encoding == 0x02)
+		else if(encoding == 0x02) //UTF-16BE
 		{
+			printf("yaz encoding=02\n");
 			if(utf != NULL)
 				free(utf);
-			utf16be_to_utf8(data, framedata->len - 1, &utf);
+			utf = jconv_strdup_conv_autodetect(data, "UTF-8", "UTF-16BE");
 		}
-		else if(encoding == 0x03)
+		else if(encoding == 0x03) //UTF-8
 		{
-			utf = realloc(utf, framedata->len);
-			strcpy(utf, data);
+			printf("yaz encoding=03\n");
+//			utf = jconv_strdup_conv_autodetect(data, "UTF-8", NULL);
+			utf = strdup(data);
 		}
 		framedata->len = strlen(utf) + 1;
 		framedata->data = realloc(framedata->data, framedata->len);
