我一直在寻找一种在Unicode字符串类型之间进行转换的方法,并且遇到了这种方法.我不仅没有完全理解方法(没有评论),而且文章暗示将来会有更好的方法.
如果这是最好的方法,请指出是什么让它起作用,如果不是,我想听听有关更好方法的建议.
我想知道是否有一个推荐的'交叉'Windows和Linux方法,用于将字符串从UTF-16LE转换为UTF-8?或者每个环境应该使用不同的方法?
我设法谷歌几个引用'iconv',但对于somreason我找不到基本转换的样本,例如 - 将wchar_t UTF-16转换为UTF-8.
任何人都可以推荐一种"交叉"的方法,如果您知道参考文献或带样本的指南,我将非常感激.
谢谢,Doori酒吧
如果我有UTF-8 std::string怎么把它转换成UTF-16 std::wstring?实际上,我想比较两个波斯语.
我正在尝试做一个非常简单的任务:获取一个unicode-aware wstring并将其转换为a string,编码为UTF8字节,然后采用相反的方式:获取string包含UTF8字节并将其转换为unicode-aware wstring.
问题是,我需要它跨平台,我需要它与Boost一起工作......而我似乎无法想办法让它工作.我一直在玩弄
试图将代码转换为使用stringstream/ wstringstream而不是任何文件,但似乎没有任何工作.
例如,在Python中它看起来像这样:
>>> u"????"
u'\u05e9\u05dc\u05d5\u05dd'
>>> u"????".encode("utf8")
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>> '\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'.decode("utf8")
u'\u05e9\u05dc\u05d5\u05dd'
Run Code Online (Sandbox Code Playgroud)
我最终追求的是:
wchar_t uchars[] = {0x5e9, 0x5dc, 0x5d5, 0x5dd, 0};
wstring ws(uchars);
string s = encode_utf8(ws);
// s now holds "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d"
wstring ws2 = decode_utf8(s);
// ws2 now holds {0x5e9, 0x5dc, 0x5d5, 0x5dd}
Run Code Online (Sandbox Code Playgroud)
我真的不想在ICU上添加另一种依赖关系......或者根据我的理解,应该可以使用Boost.
一些示例代码将非常感谢!谢谢
这似乎是一个非常柔软的问题,但我总是很难查找这个函数,因为似乎有很多关于char和tchar的引用的变化.
我正在研究一些旧的(并且专门针对win32)的东西,并考虑使它更现代/可移植 - 即在C++ 11中重新实现一些可广泛重用的部分.其中一个部分是在utf8和utf16之间进行转换.在Win32 API中,我正在使用MultiByteToWideChar/ WideCharToMultiByte,尝试使用此处的示例代码将这些内容移植到C++ 11:https://stackoverflow.com/a/14809553.结果是
发布版本(由MSVS 2013编译,在Core i7 3610QM上运行)
stdlib = 1587.2 ms
Win32 = 127.2 ms
Run Code Online (Sandbox Code Playgroud)
调试构建
stdlib = 5733.8 ms
Win32 = 127.2 ms
Run Code Online (Sandbox Code Playgroud)
问题是 - 代码有问题吗?如果一切似乎都没问题 - 这种性能差异是否有充分的理由?
测试代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <iterator>
#include <clocale>
#include <codecvt>
#define XU_BEGIN_TIMER(NAME) \
{ \
LARGE_INTEGER __freq; \
LARGE_INTEGER __t0; \
LARGE_INTEGER __t1; \
double __tms; \
const char* __tname = NAME; \
char __tbuf[0xff]; \
\ …Run Code Online (Sandbox Code Playgroud) 我必须处理一种文件格式(包括读取和写入),其中字符串以UTF-16编码(每个字符2个字节).由于ASCII表中的字符很少在应用程序域中使用,因此我的C++模型类中的所有字符串都存储在std :: string(UTF-8编码)的实例中.
我正在寻找一个库(在STL和Boost中搜索没有运气)或一组C/C++函数来处理这个std :: string < - > UTF-16转换从加载或保存到文件格式时(实际建模)作为一个字节流)包括代理对的生成/识别和所有那些Unicode的东西(我承认不是专家)...
有什么建议?谢谢!
编辑:忘了提它应该跨平台(Win/Mac),不能使用C++ 11.
我正在尝试将UTF-8 string转换为ISO-8859-1 char*以用于遗留代码.我看到这样做的唯一方法是iconv.
我肯定更喜欢完全string基于C++的解决方案,然后只需调用.c_str()生成的字符串.
我该怎么做呢?请尽可能使用代码示例.iconv如果它是你知道的唯一解决方案,我很好用.
我是 C++ 新手,没有 CS 背景。因此,如果这个问题很愚蠢或者之前已经被回答过,请原谅我。
\n\n我有一个 C++ 字符串,语言是泰卢固语。
\n\nstd::string str = "\xe0\xb0\x89\xe0\xb0\x82\xe0\xb0\xa6\xe0\xb0\xbf"; // (it means exists; pronounced as Vundi)\nstd::string substring = str.substr(0,3);\nRun Code Online (Sandbox Code Playgroud)\n\n上面的子字符串将是“\xe0\xb0\x89”(发音为 Vu),其 unicode 十六进制值为 0C09。
\n\n如何从子字符串中获取值 0C09?\n目的是检查子字符串是否在泰卢固语的有效范围内 (0C00\xe2\x80\x930C7F)。
\n\n我已经看到了它们适用于 obj-c 、 java、 php、 c# 等的其他问题。我正在使用 std::string 专门寻找 c++。
\n\n根据评论,我已阅读joelonsoftware.com/articles/Unicode.html上的文章。
\n\n让我用更多信息更新我的问题。\n我使用的是 Fedora 19 x86_64,编码为 UTF-8。控制台能够正确显示文本。
\n\n根据这篇文章,如果我理解正确的话,ASCII 是单字节字符,unicode 是多字节字符。上面的代码示例反映了这一点,这里每个 unicode 字符的长度为 3 个字节。除了讨论 UTF-8/ 文本编码和多字节字符之外,本文对检测 unicode 字符串的语言没有提供任何实际帮助。
\n\n也许我应该重新表述我的问题:
\n\n如何在 C++ 中检测 unicode 字符串的语言?
\n\n预先感谢您的帮助。
\n我正在尝试从C ++应用程序的控制台读取UTF-8编码的波兰语字符。我确定控制台使用此代码页(已签入属性)。我已经尝试过的:
在主要功能的开头,我有以下几行:
setlocale(LC_ALL, "PL_pl.UTF-8");
SetConsoleOutputCP(CP_UTF8);
SetConsoleCP(CP_UTF8);
Run Code Online (Sandbox Code Playgroud)
我将非常感谢您的帮助。