libCEF 的 CefString、cef_string_t 在 Windows 下均表示一个 16 位的 Unicode 字符串,它们的使用请参考下面的代码

{//wchar_t* ==> CefString

const wchar_t* pUTF16 = L"字符串\0(UTF-16)";

CefString s(pUTF16); //\0 处会被截断, 内部调用 FromWString

s = pUTF16; //\0 处会被截断, 内部调用 FromWString

CefString s1(std::wstring(pUTF16,12)); //\0 处不会被截断,内部调用 FromWString

s.FromWString(std::wstring(pUTF16,12)); //\0 处不会被截断

s.FromString(pUTF16,12,true); //\0 处不会被截断,这个效率应该是最高的(不会产生 std::wstring 临时对象)

}

{//CefString ==> wchar_t*

CefString s(L"字符串");

const wchar_t*pUTF16 = NULL;

pUTF16 = s.ToWString().c_str(); //s.ToWString() 返回的是 std::wstring 对象

pUTF16 = ((std::wstring)s).c_str(); //(std::wstring)s 会调用 ToWString 返回 std::wstring 对象

pUTF16 = (const wchar_t*)s.c_str(); //效率最高,但有可能返回 NULL

}

{//UTF-8 ==> CefString

const wchar_t* pUTF16 = L"字符串\0(UTF-8)";

char pUTF8[256];

int nLen8 = WideCharToMultiByte(CP_UTF8,0,pUTF16,11,pUTF8,sizeof(pUTF8),NULL,NULL);

pUTF8[nLen8] = '\0';

CefString s(pUTF8); //\0 处会被截断, 内部调用 FromString

s = pUTF8; //\0 处会被截断, 内部调用 FromString

CefString s1(std::string(pUTF8,nLen8)); //\0 处不会被截断,内部调用 FromString

s.FromString(std::string(pUTF8,nLen8)); //\0 处不会被截断

}

{//CefString ==> UTF-8

CefString s(L"字符串");

const char*pUTF8 = NULL;

pUTF8 = s.ToString().c_str(); //s.ToString() 返回的是 std::string 对象

pUTF8 = ((std::string)s).c_str(); //(std::string)s 会调用 ToString 返回 std::string 对象

}

{//CString ==> CefString

CString s(_T("字符串"));

CStringW sW((LPCTSTR)s,s.GetLength());

CefString sCS;

sCS.FromString((const wchar_t*)sW,sW.GetLength(),true);

}

{//CefString ==> CString

CefString sCS(L"字符串");

CString s((const wchar_t*)sCS.c_str(),sCS.length());

}

{//cef_string_t 的使用

CefSettings settings; //settings.locale 就是一个 cef_string_t

/**************************************************************************\

下面的代码给 cef_string_t 变量赋值,即给 settings.locale 赋值

CefString 的成员变量 string_ 就是一个 cef_string_t*

创建 CefString 临时对象时,该对象的成员变量 string_ = &settings.locale

接着调用 CefString::operator= 函数,给 string_ 赋值 L"zh-CN"(其实是给 settings.locale 赋值)

CefString 临时对象析构时,成员变量 owner_ 为 false,就不会释放 string_ 所指向的字符串了

最终 settings.locale 就是 L"zh-CN"

\**************************************************************************/

CefString(&settings.locale) = L"zh-CN";

/**************************************************************************\

根据 cef_string_t 变量获得 Unicode 字符串的首地址和字符数

\**************************************************************************/

const wchar_t* pStr = (const wchar_t*)settings.locale.str; //首地址,有可能为 NULL

int nLen = settings.locale.length; //字符数

}

libCEF总结02字符串的更多相关文章

  1. C语言-06复杂数据类型-02字符串

    #include <stdio.h> int main() { //char name[] = {'i', 't', 'c', 'H', 's', 't', '\0'}; char nam ...

  2. Python数据类型-02.字符串

    本文主要记录字符串的相关知识,包括字符串的定义特点,常用方法和 请知悉: 计算机中,一切皆为对象世界万物,皆为对象,一切对象皆可分类 1.什么是字符串? 类似"hello world&quo ...

  3. Java String:重要到别人只能当老二的字符串类

    字符串,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思.你比如 ...

  4. SQL语句操作数据与一些函数使用的丰富数据库

    数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...

  5. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  6. C#语言和数据库基础

    第一章 第一个C#程序 Vs2012密钥 RBCXF-CVBGR-382MK-DFHJ4-C69G8 01..net和C#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标 ...

  7. S1java基础学习笔记

    第一章  Java基础 程序目标:减轻现实生活中一类人的工作量,提高工作效率. 学员最终可以书写系统: 超市管理系统,POS机系统等 入库单 销售单 01.课程重点 五大重点: 01.分支(选择)结构 ...

  8. NSURLConnection使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. C#语言的基础

    一.C#的引入 01..net和C#的区别 1)大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. 2).net ...

随机推荐

  1. jQueryEasyUI Messager基本使用

    二.jQueryEasyUI Messager基本使用 1.$.messager.alert(title, msg, icon, fn)1>.基本用法 代码: 1 2 3 4 5 6 7 8 9 ...

  2. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  3. Java动态代理 cglib

    代理模式:为某些对象提供代理以实现对这个对象的访问. 对一个对象进行访问控制的原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化. 一般包括以下组件: 被代理者接口:提供被代理者的访问途径. ...

  4. Bad apple for CSharp

    前言:记得10年的时候我还在上学,有一天逛csdn看到了字符版的badapple,感觉这东西好NB啊,然后就下载了一份,最近整理博客就把他整理博客,原作者是谁真心不知道,这是在果壳看到的. Bad A ...

  5. mfc unicode下一些容易容易搞混的基本类型

    经理要求以后的项目都使用unicode,整理以下看起来让人懵逼的基本类型... 其实在mfc中最容易让人发狂的就是关于字符的操作了. 两种常见基本C++char:(当然C++11新增char_16t. ...

  6. Vmware10.0 安装系统以及使用笔记

    1.安装教程参考 大致分为:vmware10.0安装-------建立虚拟机---------设置虚拟机---------启动虚拟机(IOS安装)---------安装系统---------安装vmt ...

  7. QWebView下载文件,QUrl中解析文件名

    参考网址: http://blog.csdn.net/cdnight/article/details/23658715 http://www.tuicool.com/articles/AzeaUz h ...

  8. genome MuSic安装

    系统:ubuntu 15.04全程在root权限下安装 首先安装软件samtools ,必须是samtools-0.1.19 版本tar jxf samtools-0.1.19.tar.bz2cd s ...

  9. CUBRID学习笔记23 关键字列表

    先放上特殊的字符 Backtick Symbol - `    反引号 同撇 Double Quotes - "      双引号 Square Brackets - [  中括号 如    ...

  10. MySQL多表更新(逻辑外键/事实外键)

    语法结构: UPDATE  table_reference  SET  列名1=value1[,列名2=value2,......] [WHERE  where_condition] 说明: tabl ...