Index: src/util.h
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/util.h,v
retrieving revision 1.6
diff -u -r1.6 util.h
--- src/util.h	20 Jan 2013 13:57:51 -0000	1.6
+++ src/util.h	18 Mar 2013 19:59:12 -0000
@@ -379,6 +379,7 @@
 
 QCString externalLinkTarget();
 QCString externalRef(const QCString &relPath,const QCString &ref,bool href);
+int sizeNextUtf8Char(const char *p);
 int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos);
 
 /** Data associated with a HSV colored image. */
Index: src/util.cpp
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/util.cpp,v
retrieving revision 1.10.2.2
diff -u -r1.10.2.2 util.cpp
--- src/util.cpp	3 Mar 2013 20:01:17 -0000	1.10.2.2
+++ src/util.cpp	18 Mar 2013 19:59:48 -0000
@@ -6734,7 +6734,25 @@
     return FALSE;
 }
 
+int sizeNextUtf8Char(const char *p)
+{
+  int bytes=1;
+  char c = *p;
+  if (c<0) // multibyte utf-8 character
+  {
+    bytes++;   // 1xxx.xxxx: >=2 byte character
+    if (((uchar)c&0xE0)==0xE0)
+    {
+      bytes++; // 111x.xxxx: >=3 byte character
+    }
+    if (((uchar)c&0xF0)==0xF0)
+    {
+      bytes++; // 1111.xxxx: 4 byte character
+    }
+  }
 
+  return bytes;
+}
 int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos)
 {
   int bytes=1;
Index: src/xmlgen.cpp
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/xmlgen.cpp,v
retrieving revision 1.7
diff -u -r1.7 xmlgen.cpp
--- src/xmlgen.cpp	10 Feb 2013 09:38:59 -0000	1.7
+++ src/xmlgen.cpp	18 Mar 2013 20:19:52 -0000
@@ -122,6 +122,8 @@
 inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
 {
   char c;
+  int bytes;
+  int i;
   while ((c=*s++))
   {
     switch(c)
@@ -140,7 +142,15 @@
       case '&':  t << "&amp;"; col++;  break;
       case '\'': t << "&apos;"; col++; break; 
       case '"':  t << "&quot;"; col++; break;
-      default:   t << c; col++;        break;         
+      default:   bytes = sizeNextUtf8Char(s);
+                 t << c;
+                 for (i = 1 ; i < bytes; i++)
+                 {
+                   c=*s++;
+                   t << c;
+                 }
+                 col++;
+                 break;
     }
   } 
 }
Index: src/htmlgen.cpp
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/htmlgen.cpp,v
retrieving revision 1.10.4.2
diff -u -r1.10.4.2 htmlgen.cpp
--- src/htmlgen.cpp	24 Feb 2013 09:51:32 -0000	1.10.4.2
+++ src/htmlgen.cpp	18 Mar 2013 20:17:27 -0000
@@ -1262,6 +1262,8 @@
     const char *p=str;
     char c;
     int spacesToNextTabStop;
+    int bytes;
+    int i;
     while (*p)
     {
       c=*p++;
@@ -1294,8 +1296,14 @@
                      m_t << "\\";
                    m_col++;
                    break;
-        default:   m_t << c;    
-                   m_col++;                    
+        default:   bytes = sizeNextUtf8Char(p);
+                   m_t << c;
+                   for (i = 1 ; i < bytes; i++)
+                   {
+                     c=*p++;
+                     m_t << c;
+                   }
+                   m_col++;
                    break;
       }
     }
Index: src/mangen.cpp
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/mangen.cpp,v
retrieving revision 1.4.4.2
diff -u -r1.4.4.2 mangen.cpp
--- src/mangen.cpp	10 Mar 2013 10:20:23 -0000	1.4.4.2
+++ src/mangen.cpp	18 Mar 2013 20:23:09 -0000
@@ -330,6 +330,8 @@
   {
     const char *p=str;
     char c;
+    int bytes;
+    int i;
     int spacesToNextTabStop;
     while (*p)
     {
@@ -345,7 +347,16 @@
         case '\n':  t << "\n"; firstCol=TRUE; col=0; break;
         case '\\':  t << "\\"; col++; break;
         case '\"':  c = '\''; // no break!
-        default:    t << c; firstCol=FALSE; col++; break;
+        default:    bytes = sizeNextUtf8Char(p);
+                    t << c;
+                    for (i = 1 ; i < bytes; i++)
+                    {
+                      c=*p++;
+                      t << c;
+                    }
+                    col++;
+                    firstCol = FALSE;
+                    break;
       }
     }
     //printf("%s",str);fflush(stdout);
Index: src/rtfgen.cpp
===================================================================
RCS file: /cygdrive/d/cvs_doxygen/doxygen/doxygen/src/rtfgen.cpp,v
retrieving revision 1.6
diff -u -r1.6 rtfgen.cpp
--- src/rtfgen.cpp	20 Jan 2013 13:57:50 -0000	1.6
+++ src/rtfgen.cpp	18 Mar 2013 20:21:03 -0000
@@ -1763,8 +1763,10 @@
   //static char spaces[]="        ";
   if (str)
   {
-    const unsigned char *p=(const unsigned char *)str;
-    unsigned char c;
+    const char *p=(const char *)str;
+    char c;
+    int bytes;
+    int i;
     int spacesToNextTabStop;
 
     while (*p)
@@ -1800,7 +1802,15 @@
         case '{':   t << "\\{"; col++;          break;
         case '}':   t << "\\}"; col++;          break;
         case '\\':  t << "\\\\"; col++;         break;
-        default:    t << (char)c; col++;           break;
+        default:    bytes = sizeNextUtf8Char(p);
+                    t << c;
+                    for (i = 1 ; i < bytes; i++)
+                    {
+                      c=*p++;
+                      t << c;
+                    }
+                    col++;
+                    break;
       }
     }
   }
