游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4969|回复: 7

怎样把中文的string字符转换为CEGUI的String字符?

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-5-19 15:11:00 | 显示全部楼层 |阅读模式
中文字符在CEGUI的String中总是乱码,

请问怎么转换?

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2007-5-19 19:06:00 | 显示全部楼层

Re: 怎样把中文的string字符转换为CEGUI的String字符?

我自己写了两个转换函数

//字符转换
char * AtoU(const char* str)
{
        WCHAR*     strA;      
        int i= MultiByteToWideChar(CP_ACP,0 ,(char*)str,-1,NULL,0);  

        strA = new WCHAR;      
        MultiByteToWideChar(CP_ACP,0,(char*)str,-1,strA,i);      

        i= WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);

        char *strB = new char;

        WideCharToMultiByte (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);

        delete strA;
        return strB;
}

const char * UtoA(const char* str)
{
        WCHAR*     strA;      
        int i= MultiByteToWideChar(CP_UTF8,0 ,(char*)str,-1,NULL,0);  

        strA = new WCHAR;      
        MultiByteToWideChar(CP_UTF8,0,(char*)str,-1,strA,i);      

        i= WideCharToMultiByte(CP_ACP,0,strA,-1,NULL,0,NULL,NULL);

        char *strB = new char;

        WideCharToMultiByte (CP_ACP,0,strA,-1,strB,i,NULL,NULL);

        delete strA;
        return strB;
}



OGRE支持中文路径和文件名吗?

为什么我打开中文名文件一直出这个错误 :

OGRE EXCEPTION(6:FileNotFoundException): Cannot open file: 模型文件.mesh in FileSystemArchive:pen at ..\src\OgreFileSystem.cpp (line 211)

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2007-5-19 20:17:00 | 显示全部楼层

Re:怎样把中文的string字符转换为CEGUI的String字符?

在vs .net 2005中不正确,VC8STL的bug,要转换为wchar_t!

在 FileSystem.h中


WCHAR * MtoW(const char* str)
        {
                WCHAR*     strA;      
                int i= MultiByteToWideChar(CP_ACP,0 ,(char*)str,-1,NULL,0);  

                strA = new WCHAR;      
                MultiByteToWideChar(CP_ACP,0,(char*)str,-1,strA,i);      

                return strA;
        }

        //-----------------------------------------------------------------------
        DataStreamPtr FileSystemArchive:pen(const String& filename) const
        {
                String full_path = concatenate_path(mName, filename);

                // Use filesystem to determine size
                // (quicker than streaming to the end and back)
                struct stat tagStat;
                int ret = stat(full_path.c_str(), &tagStat);
                assert(ret == 0 && &quotroblem getting file size" );

                // Always open in binary mode
                std::ifstream *origStream = new std::ifstream();
                origStream->open(MtoW(full_path.c_str()), std::ios::in | std::ios::binary);

                // Should check ensure open succeeded, in case fail for some reason.
                if (origStream->fail())
                {
                        delete origStream;
                        OGRE_EXCEPT(Exception::ERR_FILE_NOT_FOUND,
                                "Cannot open file: " + filename,
                                "FileSystemArchive::open");
                }

                /// Construct return stream, tell it to delete on destroy
                FileStreamDataStream* stream = new FileStreamDataStream(filename,
                        origStream, tagStat.st_size, true);
                return DataStreamPtr(stream);
        }

6

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2007-5-24 11:38:00 | 显示全部楼层

Re:怎样把中文的string字符转换为CEGUI的String字符?

好好看看“免费打工仔”的代码和文章吧

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-5-24 12:56:00 | 显示全部楼层

Re:怎样把中文的string字符转换为CEGUI的String字符?

提供一个简单的函数:
CEGUI::String& encode(const char * c)
{
        static CEGUI::String str;
        WCHAR e;
        str.clear();
        int i = 0;
        while(c)
        {
                if(unsigned char(c)>=161)
                {
                        MultiByteToWideChar(0,0,c+i,2,&e,1);
                       
                        str.append(1,e);
                        i+=2;
                }
                else
                {
                        str.append(1,c);
                        i++;
                }
        }
        return str;

}

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-5-30 14:37:00 | 显示全部楼层

Re: 怎样把中文的string字符转换为CEGUI的String字符?

哪里用的了那么麻烦,这样作不就行了:
#define _CHS(str) (CEGUI::utf8*)UTFString(L ##str).asUTF8_c_str()
... ...
window->setText(_CHS("新建窗口"));

31

主题

278

帖子

298

积分

中级会员

Rank: 3Rank: 3

积分
298
发表于 2007-6-7 22:42:00 | 显示全部楼层

Re:怎样把中文的string字符转换为CEGUI的String字符?

谢谢.

7

主题

36

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2007-7-17 16:36:00 | 显示全部楼层

Re:怎样把中文的string字符转换为CEGUI的String字符?

我在Visual Stuido 2005上使用OGRE 1.4.3 + CEGUI 0.5.1。
我的方法是:CEGUI::String ceguiString =  (CEGUI::utf8*)Ogre::UTFString(L"你好!").asUTF8_c_str();
最后,还要将出现汉字的页面在高级保存选项中保存为Unicode(带签名)格式。
以后,只要有汉字出现的地方,都保存为Unicode格式,就可以了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 19:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表