Thanks you all, and I implement drawing chinese text as below:<br><div><div>================================<br>#include <windows.h><br><br>static int bstr2utf8(BSTR bstrIn, int bstrLen, byte *pOut)<br>{<br>  int cbSize;<br><br>    if (!bstrIn) {<br>        return  0;<br>  }<br><br>    cbSize = WideCharToMultiByte(CP_UTF8, 0, bstrIn, bstrLen, 0, 0, 0, 0);<br>  if (pOut) {<br>      cbSize = WideCharToMultiByte(CP_UTF8, 0, bstrIn, bstrLen, (LPSTR) pOut, cbSize, 0, 0);<br>    assert(pOut[cbSize-1]==0);<br>  }<br><br>    return cbSize;<br>}<br><br>static int bytes2bstr(UINT uCodePage, byte* pBytesIn, DWORD cbSizeIn, BSTR *pBstrOut)<br>{<br>  int   cchNeeded;<br>  LPSTR    pstr;<br><br>  *pBstrOut = 0;<br><br>    cchNeeded = MultiByteToWideChar(uCodePage, 0, (LPCSTR)pBytesIn, cbSizeIn, 0, 0);<br>    if (0 == cchNeeded) {<br>        return (0);<br>  }<br><br>    pstr = (LPSTR) CoTaskMemAlloc (sizeof(DWORD) + sizeof(WCHAR)*cchNeeded);<br>    if (!pstr) {<br>        return (-1);<br>  }<br><br>    if (cchNeeded != MultiByteToWideChar(uCodePage, 0, (LPCSTR)pBytesIn, cbSizeIn, <br>    (LPWSTR)(pstr+sizeof(DWORD)), cchNeeded)) {<br>        CoTaskMemFree(pstr);<br>        return (-2);<br>    }<br><br>    *((DWORD*)pstr) = sizeof(WCHAR)*(cchNeeded-1);<br>    *pBstrOut = (BSTR)(pstr + sizeof(DWORD));<br><br>    return cchNeeded;<br>}<br><br>char * ansi2utf8(char *str)<br>{<br>  BSTR bstr = 0;<br>  byte *utf8 = 0;<br>  int len, cb;<br><br>  len = bytes2bstr(CP_ACP, (byte*) str, strlen(str)+1, &bstr);<br>  if (len > 0) {<br>    cb = bstr2utf8(bstr, len, utf8);<br>    if (cb > 0) {<br>      utf8 = (byte*) malloc(cb);<br>      bstr2utf8(bstr, len, utf8);<br>    }<br><br>    SysFreeString(bstr);<br>    return (char*) utf8;<br>  }<br><br>  return 0;<br>}<br><br>int drawChinaText(char *shapefile, char *shapeid, int width, int length, gde_drawsurface_format format)<br>{<br>  cairo_surface_t *surface;<br>  cairo_t *cr;<br><br>  char *font;<br>  char *text;<br><br>  font = ansi2utf8("文泉驿等宽正黑");  //"Arial Unicode MS"<br>  text = ansi2utf8("Hello, Chinese! 你好,中国人!");<br><br>  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, length);<br>  cr = cairo_create (surface);<br><br><br>  cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);<br>  cairo_set_font_size (cr, 32.0);<br>  cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);<br>  cairo_move_to (cr, 10.0, 50.0);<br><br>  cairo_show_text (cr, text);<br><br>  cairo_destroy (cr);<br><br>  cairo_surface_write_to_png (surface, "c:/temp/hello-cairo.png");<br>  cairo_surface_destroy (surface);<br><br>  free(font);<br>  free(text);<br><br>  return 0;<br>}<br>================================</div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "快乐2013"<350137278@qq.com>;</div><div><b>发送时间:</b> 2013年5月6日(星期一) 晚上9:43</div><div><b>收件人:</b> "Simon Sapin"<simon.sapin@exyr.org>; "cairo"<cairo@cairographics.org>; <wbr></div><div></div><div><b>主题:</b> [cairo] 回复:  回复:  How to show chinese text using cairo</div></div><div><br></div>thanks for your advise. but I fail to compile pango on win7.<br>can freetype do it job?<br>pango with GTK+ is so torrible on win7. <br><div><div><br></div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "Simon Sapin"<simon.sapin@exyr.org>;</div><div><b>发送时间:</b> 2013年5月6日(星期一) 晚上9:37</div><div><b>收件人:</b> "cairo"<cairo@cairographics.org>; <wbr></div><div></div><div><b>主题:</b> Re: [cairo] 回复:  How to show chinese text using cairo</div></div><div><br></div>Le 06/05/2013 15:13, 快乐2013 a écrit :<br>> Hi, what I have my code as below:<br>><br>>     cairo_select_font_face (cr, "Arial Unicode MS",<br>> CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);<br>>     cairo_set_font_size (cr, 32.0);<br>>     cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);<br>>     cairo_move_to (cr, 10.0, 50.0);<br>><br>>      cairo_show_text (cr, "Hello, 中国人  "); // this clause cannot work<br>><br>> I wonder if the following can work at all.<br>><br>>      // does this clause can work?<br>>      cairo_show_text (cr, toUtf8("Hello, 中国人  "));<br>><br>> here toUtf8 is a functioin doing convertion from ansi to utf8<br><br>Hi,<br><br>I don’t know what is the character encoding of string literals on your <br>system (perhaps just the encoding your editor is saving as), but yes, <br>cairo_show_text does support Unicode and expects a NUL-terminated UTF-8 <br>string.<br><br>http://cairographics.org/manual/cairo-text.html#cairo-show-text<br><br>But this is a the "toy" text API, you might get better results with Pango.<br><br>Cheers,<br>-- <br>Simon Sapin<br>-- <br>cairo mailing list<br>cairo@cairographics.org<br>http://lists.cairographics.org/mailman/listinfo/cairo</div></div>