diff sbr/ml_codeconv.c @ 7:c20e4181370f

utf-8 input assumption in case of base64/utf-8
author kono
date Sun, 04 Dec 2005 02:30:39 +0900
parents d802748a597d
children 77780b728543
line wrap: on
line diff
--- a/sbr/ml_codeconv.c	Sat Dec 03 17:50:08 2005 +0900
+++ b/sbr/ml_codeconv.c	Sun Dec 04 02:30:39 2005 +0900
@@ -416,21 +416,21 @@
     if ((s == NULL) || ((coding = CSL_FILE(ml_coding_info)) == CS_NOCONV)) 
       return(s);
     
-    ml_conv_sbr(s, coding, CE_UNKNOWN);
+    ml_conv_sbr(s, coding, CE_UNKNOWN, 0);
     return(s);
 }
 
 char *
-ml_conv_decode(s,encode)
+ml_conv_decode(s,encode,charset)
      char *s;
-     int encode;
+     int encode,charset;
 {
     coding_system_t coding;
     
     if ((s == NULL) || ((coding = CSL_FILE(ml_coding_info)) == CS_NOCONV)) 
       return(s);
     
-    ml_conv_sbr(s, coding, encode);
+    ml_conv_sbr(s, coding, encode, charset);
     return(s);
 }
 
@@ -453,11 +453,17 @@
 } 
 
 static char *
-cs_input_opt(int cs, int encode)
+cs_input_opt(int cs, int encode, int input_charset)
 {
     switch(encode) {
-    case CE_BASE64: return "-emB";
-    case CE_QUOTED: return "-emQ";
+    case CE_BASE64: 
+	if (input_charset==CS_UTF8)
+	    return "-emBW8";
+	return "-emB";
+    case CE_QUOTED: 
+	if (input_charset==CS_UTF8)
+	    return "-emQW8";
+	return "-emQ";
     }
     switch(cs) {
     case CS_JIS7: return "-Je";
@@ -470,12 +476,12 @@
 } 
 
 static void
-ml_conv_sbr(in, cs, encode)
+ml_conv_sbr(in, cs, encode, input_charset)
      char *in;
      coding_system_t cs;
-     int encode;
+     int encode, input_charset;
 {
-    char *opt = cs_input_opt(cs,encode);
+    char *opt = cs_input_opt(cs,encode,input_charset);
     int len = strlen(in);
     nkf_open((unsigned char *)opt,(unsigned char *)in,len,(unsigned char *)in,len,extend,0);
     nkf_end();