Index: ext/scintilla/win32/PlatWin.cxx
===================================================================
--- ext/scintilla/win32/PlatWin.cxx	(revision 26150)
+++ ext/scintilla/win32/PlatWin.cxx	(working copy)
@@ -274,8 +274,8 @@
 }
 #endif
 
-static void SetLogFont(LOGFONTA &lf, const char *faceName, int characterSet, float size, int weight, bool italic, int extraFontFlag) {
-	lf = LOGFONTA();
+static void SetLogFont(LOGFONTW &lf, const char *faceName, int characterSet, float size, int weight, bool italic, int extraFontFlag) {
+	lf = LOGFONTW();
 	// The negative is to allow for leading
 	lf.lfHeight = -(abs(static_cast<int>(size + 0.5)));
 	lf.lfWeight = weight;
@@ -282,7 +282,7 @@
 	lf.lfItalic = static_cast<BYTE>(italic ? 1 : 0);
 	lf.lfCharSet = static_cast<BYTE>(characterSet);
 	lf.lfQuality = Win32MapFontQuality(extraFontFlag);
-	StringCopy(lf.lfFaceName, faceName);
+	UTF16FromUTF8(faceName, strlen(faceName)+1, lf.lfFaceName, LF_FACESIZE);
 }
 
 /**
@@ -305,7 +305,7 @@
 	FontCached *next;
 	int usage;
 	float size;
-	LOGFONTA lf;
+	LOGFONTW lf;
 	int technology;
 	int hash;
 	explicit FontCached(const FontParameters &fp);
@@ -328,7 +328,7 @@
 	hash = HashFont(fp);
 	fid = 0;
 	if (technology == SCWIN_TECH_GDI) {
-		HFONT hfont = ::CreateFontIndirectA(&lf);
+		HFONT hfont = ::CreateFontIndirectW(&lf);
 		fid = reinterpret_cast<void *>(new FormatAndMetrics(hfont, fp.extraFontFlag, fp.characterSet));
 	} else {
 #if defined(USE_D2D)
@@ -377,14 +377,18 @@
 }
 
 bool FontCached::SameAs(const FontParameters &fp) {
-	return
+	if (
 		(size == fp.size) &&
 		(lf.lfWeight == fp.weight) &&
 		(lf.lfItalic == static_cast<BYTE>(fp.italic ? 1 : 0)) &&
 		(lf.lfCharSet == fp.characterSet) &&
 		(lf.lfQuality == Win32MapFontQuality(fp.extraFontFlag)) &&
-		(technology == fp.technology) &&
-		0 == strcmp(lf.lfFaceName,fp.faceName);
+		(technology == fp.technology)) {
+			wchar_t wszFace[LF_FACESIZE];
+			UTF16FromUTF8(fp.faceName, strlen(fp.faceName)+1, wszFace, LF_FACESIZE);
+			return 0 == wcscmp(lf.lfFaceName,wszFace);
+	}
+	return false;
 }
 
 void FontCached::Release() {
Index: ext/scintilla/win32/ScintillaWin.cxx
===================================================================
--- ext/scintilla/win32/ScintillaWin.cxx	(revision 26150)
+++ ext/scintilla/win32/ScintillaWin.cxx	(working copy)
@@ -2368,7 +2368,7 @@
 			// Since the style creation code has been made platform independent,
 			// The logfont for the IME is recreated here.
 			int styleHere = (pdoc->StyleAt(sel.MainCaret())) & 31;
-			LOGFONTA lf = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ""};
+			LOGFONTW lf = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L""};
 			int sizeZoomed = vs.styles[styleHere].size + vs.zoomLevel * SC_FONT_SIZE_MULTIPLIER;
 			if (sizeZoomed <= 2 * SC_FONT_SIZE_MULTIPLIER)	// Hangs if sizeZoomed <= 1
 				sizeZoomed = 2 * SC_FONT_SIZE_MULTIPLIER;
@@ -2382,11 +2382,13 @@
 			lf.lfWeight = vs.styles[styleHere].weight;
 			lf.lfItalic = static_cast<BYTE>(vs.styles[styleHere].italic ? 1 : 0);
 			lf.lfCharSet = DEFAULT_CHARSET;
-			lf.lfFaceName[0] = '\0';
-			if (vs.styles[styleHere].fontName)
-				StringCopy(lf.lfFaceName, vs.styles[styleHere].fontName);
+			lf.lfFaceName[0] = L'\0';
+			if (vs.styles[styleHere].fontName) {
+				const char* fontName = vs.styles[styleHere].fontName;
+				UTF16FromUTF8(fontName, strlen(fontName)+1, lf.lfFaceName, LF_FACESIZE);
+			}
 
-			::ImmSetCompositionFontA(hIMC, &lf);
+			::ImmSetCompositionFontW(hIMC, &lf);
 		}
 		::ImmReleaseContext(MainHWND(), hIMC);
 		// Caret is displayed in IME window. So, caret in Scintilla is useless.
Index: src/Utils/MiscUI/SciEdit.cpp
===================================================================
--- src/Utils/MiscUI/SciEdit.cpp	(revision 26150)
+++ src/Utils/MiscUI/SciEdit.cpp	(working copy)
@@ -367,7 +367,7 @@
 
 void CSciEdit::SetFont(CString sFontName, int iFontSizeInPoints)
 {
-    Call(SCI_STYLESETFONT, STYLE_DEFAULT, (LPARAM)(LPCSTR)CStringA(sFontName));
+    Call(SCI_STYLESETFONT, STYLE_DEFAULT, (LPARAM)(LPCSTR)CUnicodeUtils::GetUTF8(sFontName).GetBuffer());
     Call(SCI_STYLESETSIZE, STYLE_DEFAULT, iFontSizeInPoints);
     Call(SCI_STYLECLEARALL);
 
