以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  在SVG中显示中文[讨论]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=6297)


--  作者:panenhan
--  发布时间:3/30/2004 2:42:00 PM

--  在SVG中显示中文[讨论]
各位SVG达人,小弟在SVG文档中遇到了一个意想不到的问题,就是中文字体的显示问题。如下所示:
<?xml version="1.0" standalone="no"?>
<svg  id="svg-root" width="800" height="600">
    <text x="10" y="110" font-size="14" font-family="华文行楷">这是用中文显示哦.</text>
</svg>
这样,在SVG VIEWER中,中文的字体是可以显示的,但是font-family属性并没有起到作用,这是为什么?请达人指教。
但是,可笑的是,在下面的代码中,居然中文字体又显示不出来了!!奇怪。
<?xml version="1.0"?>
<svg width="800" height="600">
          <g style="font-size:14;font-family:'宋体'“>
               <text x="10" y="210">Chinese:这是用中文显示的哦。</text>
          </g>
</svg>
提示信息为令人莫名其妙的“没有排的4行,15栏”。这是为何?
--  作者:hry23
--  发布时间:4/5/2004 5:32:00 PM

--  
你没使用 encoding="utf-8" 也能显示中文?
你的第二个程序<g style="font-size:14;font-family:'宋体'“(这的“"”你写成全角的了)



--  作者:faly
--  发布时间:4/6/2004 8:57:00 AM

--  
对了
svg格式文件除了用那些制作工具打开外
还可以用哪些只看的?
--  作者:liuhyan
--  发布时间:4/23/2004 4:29:00 PM

--  
关于SVG的中文
  要在svgviewer中显示中文字体,需要将中文字体名称进行“国际化”,即将汉字字体名称改为英文名称,如将“宋体”改为“Simsun",“黑体”改为"Simhei"等,下面是部分字体对照列表:  English Name Localized Name   SimSun 宋体   SimHei 黑体   FangSong_GB2312 仿宋_GB2312   KaiTi_GB2312 楷体_GB2312   YouYuan 幼圆   STSong 华文宋体   STZhongsong 华文中宋   STKaiti 华文楷体   STFangsong 华文仿宋   STXihei 华文细黑   STLiti 华文隶书   STXingkai 华文行楷   STXinwei 华文新魏   STHupo 华文琥珀   STCaiyun 华文彩云   FZYaoTi 方正姚体简体   FZShuTi 方正舒体简体   NSimSun 新宋体   LiSu 隶书    

--  作者:acylas
--  发布时间:4/24/2004 5:20:00 PM

--  
我怎么设了UTF-8后还是不能显示中文,哪位大侠知道?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
 "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">
<svg id="svg" width="800" height="600">
 <rect style="fill:#000000;" x="0" y="0" width="800" height="600" />
 <rect style="fill:#D4D4D4;" x="1" y="1" width="798" height="598" />
 
 <rect style="fill:rgb(255,255,255);fill-opacity:1;stroke:rgb(0,0,0);stroke-opacity:1;" x="300" y="10" width="200" height="30" />
 <text style="fill:red;" font-size="14" font-family="SimSun" x="350" y="20" width="200" height="30">AA中文</text>
</svg>
--  作者:无双公子
--  发布时间:4/24/2004 9:02:00 PM

--  [转帖]中文動態資料的SVG應用實驗(节选)
...另外就是繼續測試SVG的中文使用問題。SVG本身使用的是UTF-8編碼,因此在使用各種語文方面,不會有太大的問題,不過,在Adobe SVG Viewer當中,如果要能夠看到中文,必須要在SVG當中,指定正確的字體,雖然說,您可以在SVG中直接嵌入字體,便可以讓其他人都以您所嵌入的字體,看到您在設計時所使用的字體效果,但是,如果SVG本身是一個動態程式,當中的文字可以隨著傳入的參數而改變的話,那麼嵌入字體便不是什麼好主意(你總不能把整個字體檔都嵌入到SVG圖裡頭吧)。那麼,在設計的時候,就應該選擇各種平台都可以通用的中文字體,所以我在Font-family語法中,加上兩個字體:'PMingLiU'(Windows上的「新細明體」)以及'LiGothicMed'(蘋果儷黑體,便可以正常瀏覽中文了。而雖然Font-family是CSS 2語法。不過,在瀏覽器中常用的基本字體如serif、sans-serif等,可以在瀏覽器中自行指定,而Adobe SVG Viewer不能夠使用基本瀏覽器字體檢視SVG,這在多國語文的使用上,的確有一些麻煩。

原文:[URL]http://zonble.twbbs.org/archives/2004_04/001207.php[/URL]


--  作者:小胖
--  发布时间:5/13/2004 12:05:00 PM

--  
以下是引用acylas在2004-4-24 17:20:06的发言:
我怎么设了UTF-8后还是不能显示中文,哪位大侠知道?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
  "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">
<svg id="svg" width="800" height="600">
  <rect style="fill:#000000;" x="0" y="0" width="800" height="600" />
  <rect style="fill:#D4D4D4;" x="1" y="1" width="798" height="598" />
  
  <rect style="fill:rgb(255,255,255);fill-opacity:1;stroke:rgb(0,0,0);stroke-opacity:1;" x="300" y="10" width="200" height="30" />
  <text style="fill:red;" font-size="14" font-family="SimSun" x="350" y="20" width="200" height="30">AA中文</text>
</svg>

你还需要把svg文件本身存成utf编码形式!!


--  作者:xiaopeng
--  发布时间:5/26/2004 12:50:00 AM

--  
"你还需要把svg文件本身存成utf编码形式!!"
请问楼上:怎样把svg文件本身存成utf编码形式?

--  作者:suzena
--  发布时间:5/26/2004 9:24:00 AM

--  
对啊,怎么样把SVG文件本身存为UTF编码形式?
--  作者:xkou
--  发布时间:6/4/2004 1:57:00 PM

--  
ue 打开后 文件->l转换->asc转utf
--  作者:epaulin
--  发布时间:6/4/2004 4:54:00 PM

--  
用 Linux 吧,无论是 kate 还是 gedit 保存为 UTF-8 都没有问题。

而且还有好用的 SVG 图形编辑器 inkscape


--  作者:lilinx
--  发布时间:6/6/2004 8:28:00 PM

--  
简单使用记事本打开文件,保存时选择 utf-8的格式
--  作者:zongxq
--  发布时间:6/16/2004 2:54:00 PM

--  
以下是引用lilinx在2004-6-6 20:28:58的发言:
简单使用记事本打开文件,保存时选择 utf-8的格式


能不能通过ASP或JSP直接生成 utf-8格式的SVG文件?
--  作者:hunyuan
--  发布时间:6/20/2004 8:58:00 PM

--  
我写的一段JSP代码,用JDOM实现
……

Element root = new Element("svg").setAttribute("width","760").setAttribute("height","430").setAttribute("version","1.1");
Document doc = new Document(root);

……
  java.util.Date now = new java.util.Date();
  long lt = now.getTime();
  sFileName = "/temp/" + lt + ".svg";
  String path=request.getRealPath(".");
  FileOutputStream fos = new FileOutputStream(path + "\\temp\\"+lt+".svg");
  XMLOutputter outputter = new XMLOutputter("  ",true);
  outputter.output(doc,fos);

  out.println("<EMBED NAME='SVGTest' width='761' height ='431' SRC='" + sFileName + "'>");


--  作者:zongxq
--  发布时间:6/22/2004 9:39:00 AM

--  
谢谢。
我用ADO中的ADODB.STEAM实现的
--  作者:zongxq
--  发布时间:6/25/2004 10:23:00 AM

--  
通过ADODB.Stream直接生成UTF-8编码的SVG文件
--  作者:卷积内核
--  发布时间:8/13/2004 11:10:00 AM

--  谢谢大家参与

高手如云拉

--  作者:wisd0m
--  发布时间:8/13/2004 9:14:00 PM

--  
我怎么都不知道啊 !
--  作者:卷积内核
--  发布时间:8/15/2004 3:08:00 PM

--  
EditPlus还是比较好用的工具,类型比较全,现在免费的建议下载一个
--  作者:卷积内核
--  发布时间:8/24/2004 3:42:00 PM

--  
怎么感觉还是没有很好的解决啊,在存为UTF-8后,
<text style="fill:red;" font-size="32" font-family="SimSun" x="350" y="50" width="200" height="30">欢迎光临本站</text>
可以很好的显示,但是将font-family="SimSun"删掉后就又不显示拉。
在应用中象是菜单制作中菜单上的中文如何显示呢?
例如这段程序:
menues=new Array();
hlinks=new Array();
menues[0]=new Array("首页","第一条","第二条","第三条","第四条","第五条");
           hlinks[0]=new Array("","","","http://www.163.net","");
           menues[1]=new Array("公司简介","公司历史","产品简介","发展蓝图");
           hlinks[1]=new Array("http://www.hestory.com","","");
           menues[2]=new Array("customer","user");
           hlinks[2]=new Array("");

上面的汉字怎么用前面的字体修饰?或者怎么才能象显示英文那样自由显示?


--  作者:thomsonjin
--  发布时间:10/29/2004 2:52:00 PM

--  
我也实现了:
1.将文件保存为utf格式
2.指定字体(Font-family)
谢谢各位的指教
--  作者:卷积内核
--  发布时间:11/2/2004 8:57:00 AM

--  
http://bbs.xml.org.cn/dispbbs.asp?boardID=21&ID=9540
参照一下这里吧
--  作者:卷积内核
--  发布时间:1/14/2005 10:35:00 AM

--  
还是把它置顶吧
--  作者:卷积内核
--  发布时间:1/14/2005 10:37:00 AM

--  
还是把它置顶吧
--  作者:SCYANGYU
--  发布时间:2/18/2005 10:37:00 AM

--  
终于搞清楚了!谢谢各位贤达!

大家看看这个,就会比较清楚了!

-----------------------------------------

就 Unicode 的文字檔格式,它們都會在檔案開首加入特別的字元以識別類型:

unicode 或者叫做 unicode little endian,PC上用的都是 LE 格式,首兩個 byte 是
FF FE

unicode big endian,首兩個 byte 是
FE FF

而另一種的 UTF-8 格式,首三個 byte 是
EF BB BF

LE(litte endian) 與 BE(big endian)兩者分別很明顯,LE 儲存文字時,high byte 跟 low byte 的位置是調換,而 BE 就儲存原來的 high , low byte 的位置。

中 內碼:A4A4 UNICODE:4E2D UTF-8:E4 B8 AD
文 內碼:A4E5 UNICODE:6587 UTF-8:E6 96 87
做一個文字檔案輸入「中文」兩個字,儲存了,文字檔案的內容就是:
A4 A4 A4 E5
這四個 bye

轉換成 unicode (LE) ,內容就是
FF FE 2D 4E 87 65

轉換成 unicode (BE) ,內容就是
FE FF 4E 2D 65 87

如果你的文字檔中有分行
轉換成 unicode (LE) ,內容就是
FF FE 2D 4E 0D 00 0A 00 87 65

轉換成 unicode (BE) ,內容就是
FE FF 4E 2D 00 0D 00 0A 65 87

而 UTF-8 的儲存格式,就是將一些單位元的字仍以單位元存檔,而那些雙位元都以三個或四個位元去代表
EF BB BF E4 B8 AD 0D 0A E6 96 87

由以上的例子可知,你轉換了一些字串後,要儲存成文字檔時,先要寫入兩個或三個識別位元,再可以寫入你那些已轉換的字串。


--  作者:SCYANGYU
--  发布时间:2/20/2005 6:19:00 PM

--  
要使得中文在SVG中正常显示,可以有两种方法:
(1)把整个文件保存为UTF-8编码的文件。
(2)文件仍然保存为ANSI编码的文件,但内部的中文以UTF-8编码。请看下例:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"
"http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">
<svg width="100%" height="100%"
  viewBox="0 0 4897 6337" >
<title>Book1</title>
<style type="text/css"><![CDATA[
text.t1 {font-family:'SimSun';font-size:87;fill:#000000}
]]></style>
<text class="t1"><tspan x="692,779,866,953,1040,1127,1214,1301,1388"

y="671">中华人民共和国万岁</tspan></text>
</svg>


--  作者:lxl1984
--  发布时间:3/15/2005 3:19:00 PM

--  
我还是有点晕~~~~~~~~
--  作者:lxl1984
--  发布时间:3/15/2005 3:19:00 PM

--  
我还是有点晕~~~~~~~~
--  作者:fee
--  发布时间:3/22/2005 3:36:00 PM

--  
改改DTD,
将:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">
改为:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20030114.dtd">

然后将
<text style="fill:red;" font-size="14" font-family="SimSun" x="350" y="20" width="200" height="30">AA中文</text>
中的  width="200" height="30"  删除!

就可以了~~


--  作者:_phoenix
--  发布时间:4/12/2005 11:22:00 PM

--  
百家争鸣啊.
--  作者:henrybenben
--  发布时间:4/13/2005 9:11:00 PM

--  
多谢指导,正在研究中
--  作者:suyouan
--  发布时间:5/10/2005 12:08:00 PM

--  
搞不懂
--  作者:weiwei530530
--  发布时间:5/19/2005 10:14:00 PM

--  
支持研究
--  作者:weiwei530530
--  发布时间:5/19/2005 10:15:00 PM

--  
说实话这是个最基础的问题
--  作者:keeponline
--  发布时间:5/25/2005 3:44:00 PM

--  
请问如何在VB里直接读写UTF-8格式的文档,不是VB.NET哦
--  作者:zkp0000
--  发布时间:5/29/2005 6:57:00 PM

--  
我也搞定了!
--  作者:wulemale
--  发布时间:5/31/2005 8:44:00 PM

--  
调用function时需要传递的参数是中文,在javascript中再用得到的某个text object的setD
ata()将中文写入svg中的text文本。但svg中显示的几个方块,不能显示汉字,咋办?高手指点。
------------
解决了,是我自己tiptext属性中的font-family忘改了


[此贴子已经被作者于2005-6-2 13:09:06编辑过]

--  作者:caoxy
--  发布时间:6/2/2005 7:40:00 PM

--  
你用记事本打开后,再保存的时候下面有选项的,你选择utf-8就行了
--  作者:patlast
--  发布时间:6/3/2005 1:08:00 AM

--  
请问utf-8怎么转换?
----------------------------------------------
[url=http://game.xatip.com/fmap.php/index5.html]外挂[/url] [url=http://game.xatip.com/fmap.php/index6.html]加速器[/url] [url=http://game.xatip.com/fmap.php/index7.html]地图制作[/url] [url=http://game.xatip.com/fmap.php/index8.html]官方网站[/url]

--  作者:leomay
--  发布时间:7/5/2005 9:11:00 AM

--  
可不可以直接生成utf-8格式的svg文件呢??而不是通过生成后另存为呢????
--  作者:guoliping007
--  发布时间:8/4/2005 10:35:00 AM

--  
如果这个文件是动态生成的,怎么转换成UTF呢?

后来我试了把生成文件中的汉字的编码改成UTF-8,但也有错,只能显示一部分


--  作者:chenhui_sky
--  发布时间:2/6/2006 5:52:00 PM

--  
问题关注中
--  作者:卷积内核
--  发布时间:2/7/2006 8:50:00 AM

--  
这里有VC的转换方法,其他编程也能实现,具体参照处理吧。

MFC一般编程习惯到 UNICODE宽字节字符集编程

UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射到多种语言的字符集。


MFC 以宏的形式提供了将一般文本转换成 UNICODE 数据类型的途径。
开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持 UNICODE 的应用。

定义部分:
通用 多字节 宽字节
_TCHAR/TCHAR char wchar_t
_T 或_TEXT char 常量字符串 wchar_t 常量字符串 L
LPTSTR char *(或win32下LPSTR) wchar_t *
LPCTSTR const char * LPCSTR const wchar_t *


通用形式就是自动的判断当前是否定义了_UNICODE字符集,

例 如果是的话

typedef wchar_t TCHAR;

不是的话
typedef char TCHAR;


例:
MFC中CString 类也通过一种通用定义形式

通用形式下
typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
宽字节字符集
typedef ATL::CStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW;
ANSI节字符集
typedef ATL::CStringT< char, StrTraitMFC< char > > CStringA;


操作系统对UNICODE的支持
Win98 只支持ANSI
win2000 支持ANSI 支持UNICODE
wince 只支持UNICODE


●UNICODE 转换到 UTF-8
UTF-8 编码字符理论上可以最多到 6 个字节长
注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.


U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


我使用的函数:

/*-------------------------------------------------------------------------------------
wchar_t (UNICODE 2bit)->char (UTF-8)(multi bit )
它通过简单的码位析取与分配即可完成.

本函数提供这一实现.
dest_str:
宽字节字符转换为UTF-8编码字符的目标地址.
src_wchar:被转换的宽字节源字符.
返回值:
返回实际转换后的字符的字节数. 若遇到错误或检测到非法字节序列, 则返回-1.

注意! 传递进来的宽字符应是能被合法转换为UTF-8编码的字符.
--------------------------------------------------------------------------------------
*/

size_t g_f_wctou8(char * dest_str, const wchar_t src_wchar)
{
int count_bytes = 0;
wchar_t byte_one = 0, byte_other = 0x3f; // 用于位与运算以提取位值 0x3f--->00111111
unsigned char utf_one = 0, utf_other = 0x80; // 用于"位或"置标UTF-8编码 0x80--->1000000
wchar_t tmp_wchar = L’0’; // 用于宽字符位置析取和位移(右移6位)
unsigned char tmp_char = ’0’;

if (!src_wchar)//
return (size_t)-1;

for (;;) // 检测字节序列长度
{
if (src_wchar <= 0x7f){ // <=01111111
count_bytes = 1; // ASCII字符: 0xxxxxxx( ~ 01111111)
byte_one = 0x7f; // 用于位与运算, 提取有效位值, 下同
utf_one = 0x0;
break;
}
if ( (src_wchar > 0x7f) && (src_wchar <= 0x7ff) ){ // <=0111,11111111
count_bytes = 2; // 110xxxxx 10xxxxxx[1](最多11个1位, 简写为11*1)
byte_one = 0x1f; // 00011111, 下类推(1位的数量递减)
utf_one = 0xc0; // 11000000
break;
}
if ( (src_wchar > 0x7ff) && (src_wchar <= 0xffff) ){ //0111,11111111<=11111111,11111111
count_bytes = 3; // 1110xxxx 10xxxxxx[2](MaxBits: 16*1)
byte_one = 0xf; // 00001111
utf_one = 0xe0; // 11100000
break;
}
if ( (src_wchar > 0xffff) && (src_wchar <= 0x1fffff) ){ //对UCS-4的支持..
count_bytes = 4; // 11110xxx 10xxxxxx[3](MaxBits: 21*1)
byte_one = 0x7; // 00000111
utf_one = 0xf0; // 11110000
break;
}
if ( (src_wchar > 0x1fffff) && (src_wchar <= 0x3ffffff) ){
count_bytes = 5; // 111110xx 10xxxxxx[4](MaxBits: 26*1)
byte_one = 0x3; // 00000011
utf_one = 0xf8; // 11111000
break;
}
if ( (src_wchar > 0x3ffffff) && (src_wchar <= 0x7fffffff) ){
count_bytes = 6; // 1111110x 10xxxxxx[5](MaxBits: 31*1)
byte_one = 0x1; // 00000001
utf_one = 0xfc; // 11111100
break;
}
return (size_t)-1; // 以上皆不满足则为非法序列
}
// 以下几行析取宽字节中的相应位, 并分组为UTF-8编码的各个字节
tmp_wchar = src_wchar;
for (int i = count_bytes; i > 1; i--)
{ // 一个宽字符的多字节降序赋值
tmp_char = (unsigned char)(tmp_wchar & byte_other);///后6位与byte_other 00111111
dest_str[i - 1] = (tmp_char | utf_other);/// 在前面加10----跟10000000或
tmp_wchar >>= 6;//右移6位
}
//这个时候i=1
//对UTF-8第一个字节位处理,
//第一个字节的开头"1"的数目就是整个串中字节的数目
tmp_char = (unsigned char)(tmp_wchar & byte_one);//根据上面附值得来,有效位个数
dest_str[0] = (tmp_char | utf_one);//根据上面附值得来 1的个数
// 位值析取分组__End!
return count_bytes;
}
/*------------------------------------------------------------------------
* 通过g_f_wctou8函数实现 CString (UNICODE下 ) 到 char *(UTF-8) 的转换
* wstr 为要转换的UNICODE-16的CString的一个引用
* *p 为存UTF-8格式的地址
*
目前我的做法是:
* 循环将CString 中的宽字符 利用上面的g_f_wctou8()来转换,并存到char *p中

* 这里的char *p是 要传给Client SDK,出来的格式就是UTF-8格式的
*

*-------------------------------------------------------------------------
*/
int g_f_wcs_to_pchar(CString& wstr,char * p)
{
wchar_t wc=L’1’;
char c[10]="1";//申请一个缓存
size_t r=0; //size_t unsigned integer Result of sizeof operator
int i=0;
int j=0;
for(i=0;i
{
wc=wstr.GetAt(i);//得到一个宽字符
r=g_f_wctou8(c,wc);//将一个宽字符按UTF-8格式转换到p地址
if(r==-1)//出错判断
AfxMessageBox(_T("wcs_to_pchar error"));
p[j]=c[0];//第一个值附给p
j++;
if(r>1)
{
for(size_t x=1;x
{
p[j]=c[x];
j++;
}
}
}
p[j]=’0’;
return 1;
}
/*-----------------------------------------------------------------------------
char *-->wchar_t
它通过简单的码位截取与合成即可完成.
本函数提供这一实现.
dest_wchar:
保存转换后的宽字节字符目标地址.
src_str:
被转换的UTF-8编码源字符的多字节序列.
返回值:
返回被转换的字符的字节数. 若遇到错误或检测到非法字节序列, 则返回-1.

注意! 传递进来的宽字符应是能被合法转换为UTF-8编码的字符.
------------------------------------------------------------------------------*/
size_t g_f_u8towc(wchar_t &dest_wchar, const unsigned char * src_str)
{
int count_bytes = 0;
unsigned char byte_one = 0, byte_other = 0x3f; // 用于位与运算以提取位值 0x3f-->00111111
wchar_t tmp_wchar = L’0’;

if (!src_str)
return (size_t)-1;

for (;;) // 检测字节序列长度,根据第一个字节头的1个个数
{
if (src_str[0] <= 0x7f){
count_bytes = 1; // ASCII字符: 0xxxxxxx( ~ 01111111)
byte_one = 0x7f; // 用于位与运算, 提取有效位值, 下同 01111111
break;
}
if ( (src_str[0] >= 0xc0) && (src_str[0] <= 0xdf) ){
count_bytes = 2; // 110xxxxx(110 00000 ~ 110 111111)
byte_one = 0x1f; //00011111 第一字节有效位的个数
break;
}
if ( (src_str[0] >= 0xe0) && (src_str[0] <= 0xef) ){
count_bytes = 3; // 1110xxxx(1110 0000 ~ 1110 1111)
byte_one = 0xf; //00001111
break;
}
if ( (src_str[0] >= 0xf0) && (src_str[0] <= 0xf7) ){
count_bytes = 4; // 11110xxx(11110 000 ~ 11110 111)
byte_one = 0x7;
break;
}
if ( (src_str[0] >= 0xf8) && (src_str[0] <= 0xfb) ){
count_bytes = 5; // 111110xx(111110 00 ~ 111110 11)
byte_one = 0x3;
break;
}
if ( (src_str[0] >= 0xfc) && (src_str[0] <= 0xfd) ){
count_bytes = 6; // 1111110x(1111110 0 ~ 1111110 1)
byte_one = 0x1;
break;
}
return (size_t)-1; // 以上皆不满足则为非法序列
}
// 以下几行析取UTF-8编码字符各个字节的有效位值
//先得到第一个字节的有效位数据
tmp_wchar = src_str[0] & byte_one;
for (int i=1; i
{
tmp_wchar <<= 6; // 左移6位后与后续字节的有效位值"位或"赋值
tmp_wchar = tmp_wchar | (src_str[i] & byte_other);//先与后或
}
// 位值析取__End!
dest_wchar = tmp_wchar;
return count_bytes;
}
/*-------------------------------------------------------------------------
目的 :实现 UTF-8格式 的(char *) p->(UNICODE 下 CString )wstr 的转化
循环利用g_f_u8towc()这个函数来把char *p转换成宽字符,再存到CString 中!
----------------------------------------------------------------------------
*/
CString g_f_pchar_to_wcs(const unsigned char * p )
{
CString wstr(_T(""));
wchar_t wc=L’1’;
size_t r=0; //size_t unsigned integer Result of sizeof operator
while (1)
{
if(*p==NULL||*p==’0’)//如果为空或者结束则为跳出循环
break;
r=g_f_u8towc(wc,p);//从UTF-8格式的地址中,读一个wchar_t出来
if(r==-1)//出现错误
AfxMessageBox(_T("g_f_u8towc error"));
p=p+r; //移位,准备下一次的转换
wstr+=wc;//给CString 附值
}

return wstr;

}


--  作者:acx
--  发布时间:4/7/2006 10:10:00 AM

--  
原來如此...
要將font-family設定成字型中對應的英文代碼才行...
已試出...謝謝啦..
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
250.000ms