相关疑难解决方法(0)

在string,u16string和u32string之间转换

我一直在寻找一种在Unicode字符串类型之间进行转换的方法,并且遇到了这种方法.我不仅没有完全理解方法(没有评论),而且文章暗示将来会有更好的方法.

如果这是最好的方法,请指出是什么让它起作用,如果不是,我想听听有关更好方法的建议.

c++ string unicode unicode-string c++11

43
推荐指数
2
解决办法
4万
查看次数

在Windows和Linux下,在C中将UTF-16转换为UTF-8

我想知道是否有一个推荐的'交叉'Windows和Linux方法,用于将字符串从UTF-16LE转换为UTF-8?或者每个环境应该使用不同的方法?

我设法谷歌几个引用'iconv',但对于somreason我找不到基本转换的样本,例如 - 将wchar_t UTF-16转换为UTF-8.

任何人都可以推荐一种"交叉"的方法,如果您知道参考文献或带样本的指南,我将非常感激.

谢谢,Doori酒吧

c unicode utf-8 utf-16

25
推荐指数
7
解决办法
6万
查看次数

如何将UTF-8 std :: string转换为UTF-16 std :: wstring?

如果我有UTF-8 std::string怎么把它转换成UTF-16 std::wstring?实际上,我想比较两个波斯语.

c++ string encoding

22
推荐指数
2
解决办法
3万
查看次数

C++和Boost:编码/解码UTF-8

我正在尝试做一个非常简单的任务:获取一个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.

一些示例代码将非常感谢!谢谢

c++ unicode boost utf-8

21
推荐指数
3
解决办法
4万
查看次数

在C/C++(ms)中将char []转换为/从tchar []的最简单方法是什么?

这似乎是一个非常柔软的问题,但我总是很难查找这个函数,因为似乎有很多关于char和tchar的引用的变化.

c c++ string char tchar

18
推荐指数
3
解决办法
5万
查看次数

utf8 < - > utf16:codecvt性能不佳

我正在研究一些旧的(并且专门针对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)

c++ performance utf-8 c++11

11
推荐指数
2
解决办法
2209
查看次数

将std :: string编码/解码为UTF-16

我必须处理一种文件格式(包括读取和写入),其中字符串以UTF-16编码(每个字符2个字节).由于ASCII表中的字符很少在应用程序域中使用,因此我的C++模型类中的所有字符串都存储在std :: string(UTF-8编码)的实例中.

我正在寻找一个库(在STL和Boost中搜索没有运气)或一组C/C++函数来处理这个std :: string < - > UTF-16转换从加载或保存到文件格式时(实际建模)作为一个字节流)包括代理对的生成/识别和所有那些Unicode的东西(我承认不是专家)...

有什么建议?谢谢!

编辑:忘了提它应该跨平台(Win/Mac),不能使用C++ 11.

c++ utf-16 stdstring

8
推荐指数
1
解决办法
2万
查看次数

将字符串从UTF-8转换为ISO-8859-1

我正在尝试将UTF-8 string转换为ISO-8859-1 char*以用于遗留代码.我看到这样做的唯一方法是iconv.

我肯定更喜欢完全string基于C++的解决方案,然后只需调用.c_str()生成的字符串.

我该怎么做呢?请尽可能使用代码示例.iconv如果它是你知道的唯一解决方案,我很好用.

c++ utf-8 iso-8859-1 iconv

7
推荐指数
2
解决办法
7241
查看次数

如何在C++中检查字符的unicode值的范围

我是 C++ 新手,没有 CS 背景。因此,如果这个问题很愚蠢或者之前已经被回答过,请原谅我。

\n\n

我有一个 C++ 字符串,语言是泰卢固语。

\n\n
std::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);\n
Run 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++ unicode

5
推荐指数
1
解决办法
2862
查看次数

从控制台读取UTF-8字符

我正在尝试从C ++应用程序的控制台读取UTF-8编码的波兰语字符。我确定控制台使用此代码页(已签入属性)。我已经尝试过的:

  • 使用cin-代替“ za?ó??” 我读到“ za \ 0 \ 0 \ 0 \ 0”
  • 使用wcin-而不是“ za?ó??” -与cin相同的结果
  • 使用scanf-而不是'za?ó?? \ 0'我读为'za \ 0 \ 0 \ 0 \ 0 \ 0'
  • 使用wscanf-与scanf相同的结果
  • 使用getchar一对一读取字符-与scanf相同的结果

在主要功能的开头,我有以下几行:

setlocale(LC_ALL, "PL_pl.UTF-8");
SetConsoleOutputCP(CP_UTF8);
SetConsoleCP(CP_UTF8);
Run Code Online (Sandbox Code Playgroud)

我将非常感谢您的帮助。

c++ windows utf-8 visual-c++

5
推荐指数
2
解决办法
1905
查看次数