diff -ur kdelibs-3.0.orig/kate/data/katepartreadonlyui.rc kdelibs-3.0/kate/data/katepartreadonlyui.rc
--- kdelibs-3.0.orig/kate/data/katepartreadonlyui.rc	Sun Mar 24 23:07:40 2002
+++ kdelibs-3.0/kate/data/katepartreadonlyui.rc	Sun Apr  7 18:47:40 2002
@@ -28,6 +28,7 @@
     <Action name="view_line_numbers"/>
     <Action name="set_highlight"/>
     <Action name="set_eol"/>
+    <Action name="set_charset"/>
   </Menu>
 </MenuBar>
 
diff -ur kdelibs-3.0.orig/kate/data/katepartui.rc kdelibs-3.0/kate/data/katepartui.rc
--- kdelibs-3.0.orig/kate/data/katepartui.rc	Fri Jan 25 19:47:41 2002
+++ kdelibs-3.0/kate/data/katepartui.rc	Sun Apr  7 18:47:40 2002
@@ -50,6 +50,7 @@
     <Action name="view_line_numbers"/>
     <Action name="set_highlight"/>
     <Action name="set_eol"/>
+    <Action name="set_charset"/>
   </Menu>
 </MenuBar>
 
diff -ur kdelibs-3.0.orig/kate/part/kateview.cpp kdelibs-3.0/kate/part/kateview.cpp
--- kdelibs-3.0.orig/kate/part/kateview.cpp	Mon Mar 25 11:34:02 2002
+++ kdelibs-3.0/kate/part/kateview.cpp	Sun Apr  7 18:47:40 2002
@@ -1542,6 +1542,12 @@
   list.append("&Windows/Dos");
   list.append("&Macintosh");
   setEndOfLine->setItems(list);
+
+  setCharset = new KSelectAction(i18n("&Charsets"), 0, ac, "set_charset");
+  connect(setCharset, SIGNAL(activated(int)), this, SLOT(setEncoding(int)));
+  list = KGlobal::charsets()->availableEncodingNames();
+  list.prepend( i18n( "Auto" ) );
+  setCharset->setItems(list);
 }
 
 void KateView::slotUpdate()
@@ -1554,7 +1560,14 @@
   int eol = getEol();
   eol = eol>=1 ? eol : 0;
 
-    setEndOfLine->setCurrentItem(eol);
+  setEndOfLine->setCurrentItem(eol);
+
+  QString enc = myDoc->encoding();
+  int chset = KGlobal::charsets()->availableEncodingNames().findIndex(enc);
+  if (chset < 0) /* Try again with upper */
+    chset = KGlobal::charsets()->availableEncodingNames().findIndex(enc.lower());
+  chset = chset >= 0 ? chset + 1 : 0;
+  setCharset->setCurrentItem(chset);
 }
 
 void KateView::slotNewUndo()
@@ -2467,6 +2480,22 @@
 
   myDoc->eolMode = eol;
   myDoc->setModified(true);
+}
+
+void KateView::setEncoding(int chset) {
+  QString enc;
+  if (chset == 0) {
+    enc = QTextCodec::codecForLocale()->name();
+  } else {
+    enc = KGlobal::charsets()->availableEncodingNames()[chset-1];
+    // enc = KGlobal::charsets()->encodingForName(KGlobal::charsets()->availableEncodingNames()[chset-1]);
+  }
+  // kdDebug() << "seEncoding(" << chset << "): encoding = " << enc << endl;
+  myDoc->setEncoding(enc);
+  // myDoc->setModified(true);
+  if (!doc()->isReadWrite()) {
+      myDoc->reloadFile();
+  }
 }
 
 void KateView::resizeEvent(QResizeEvent *)
diff -ur kdelibs-3.0.orig/kate/part/kateview.h kdelibs-3.0/kate/part/kateview.h
--- kdelibs-3.0.orig/kate/part/kateview.h	Fri Mar  8 10:18:04 2002
+++ kdelibs-3.0/kate/part/kateview.h	Sun Apr  7 18:47:40 2002
@@ -365,6 +365,7 @@
 //    KToggleAction *viewLineNumbers;
     KRecentFilesAction *fileRecent;
     KSelectAction *setEndOfLine;
+    KSelectAction *setCharset;
     Kate::ActionMenu *setHighlight;
 
   private slots:
@@ -594,6 +595,10 @@
      * Set the end of line mode (Unix, Macintosh or Dos)
      */
     void setEol(int);
+    /**
+      Set the File Encoding
+    */
+    void setEncoding(int);
 
   private:
     void resizeEvent(QResizeEvent *);
