diff -Naur orig/include/freetype/config/ftstdlib.h patched/include/freetype/config/ftstdlib.h
--- orig/include/freetype/config/ftstdlib.h	2009-04-01 13:22:33.604108900 +0300
+++ patched/include/freetype/config/ftstdlib.h	2009-04-09 11:24:35.447716100 +0300
@@ -114,7 +114,12 @@
 
 #define FT_FILE     FILE
 #define ft_fclose   fclose
+#if defined(WIN32)
+FILE* ft_fopen_win32(const char *fname, const char *mode);
+#define ft_fopen    ft_fopen_win32
+#else
 #define ft_fopen    fopen
+#endif
 #define ft_fread    fread
 #define ft_fseek    fseek
 #define ft_ftell    ftell
diff -Naur orig/src/base/ftsystem.c patched/src/base/ftsystem.c
--- orig/src/base/ftsystem.c	2006-04-29 08:30:38.000000000 +0300
+++ patched/src/base/ftsystem.c	2009-04-09 11:31:12.344716100 +0300
@@ -33,6 +33,10 @@
 #include FT_ERRORS_H
 #include FT_TYPES_H
 
+#if defined(WIN32)
+#include <windows.h>
+#endif
+
 
   /*************************************************************************/
   /*                                                                       */
@@ -297,5 +301,25 @@
     memory->free( memory, memory );
   }
 
+  #if defined(WIN32)
+  FILE * ft_fopen_win32( const char *fname, const char *mode )
+  {
+    // First try fopen, assuming nothing about character encodings.
+    FILE *file = fopen(fname, mode);
+    if (file == NULL) {
+      /* fopen failed. Assume the filename is UTF-8, convert to UTF-16,
+	  and try _wfopen. */
+      #define MAX_WIN32_FNAME 2048
+      #define MAX_FOPEN_MODE 100
+      wchar_t fnameW[MAX_WIN32_FNAME], modeW[MAX_FOPEN_MODE];
+      if (MultiByteToWideChar(CP_UTF8, 0, fname, -1, fnameW, MAX_WIN32_FNAME) == 0)
+        return NULL;
+      if (MultiByteToWideChar(CP_UTF8, 0, mode, -1, modeW, MAX_FOPEN_MODE) == 0)
+        return NULL;
+      file = _wfopen(fnameW, modeW);
+    }
+    return file;
+  } /* ft_fopen_win32 */
+  #endif
 
 /* END */
