相关疑难解决方法(0)

如何在C++中正确使用UTF-8上的std :: string?

我的平台是Mac和C++ 11(或更高版本).我是一名C++初学者,正在处理一个处理中文和英文的个人项目.UTF-8是此项目的首选编码.

我在Stack Overflow上阅读了一些帖子,其中许多人建议std::string在处理UTF-8时使用,并避免wchar_t因为char8_tUTF-8现在没有.

然而,他们没有谈论如何正确地与像函数处理str[i],std::string::size(),std::string::find_first_of()或者std::regex因为这些功能通常面临UTF-8时,返回意外的结果.

我应该继续std::string或切换到std::wstring?如果我应该std::string坚持下去,那么处理上述问题的最佳做法是什么?

c++ string c++11

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

在2018年用C++处理Unicode的正确方法?

我已经尝试搜索stackoverflow来找到答案,但我发现的问题和答案大约是10岁,由于变化和可能的进展,我似乎无法就该主题达成共识.

我知道在stl之外有几个库可以处理unicode-

stl(wstring,codecvt_utf8)有一些功能,但人们似乎对使用感到矛盾,因为他们处理UTF-16这个网站:(utf-8无处不在)说不应该使用和许多人网上似乎同意这个前提.

我唯一想要的是能够用unicode字符串做4件事 -

  1. 将字符串读入内存
  2. 使用unicode或ascii搜索带有正则表达式的字符串,连接或使用ascii + unicode数字或字符进行文本替换/格式化.
  3. 转换为ascii + unicode数字格式,用于不适合ascii范围的字符.
  4. 将字符串写入磁盘或发送到任何地方.

从我可以告诉icu处理这个和更多.我想知道的是,在Linux,Windows和MacOS上有一种标准的处理方式.

感谢您的时间.

c++ unicode

28
推荐指数
1
解决办法
2909
查看次数

读取多语言文件 - wchar_t vs char?

了解 unicode、语言环境、宽字符和转换对我来说是一次可怕的经历。

我需要读取包含俄语和英语,中国和乌克兰字符的文本文件一次全部

我的方法是以字节块读取文件,然后对块进行操作,在单独的线程上进行快速读取。(关联)

这是使用 std::ifstream.read(myChunkBuffer, chunk_byteSize)

但是,我知道如果我坚持使用char.


就此而言,我将一切都转化wchar_t为最佳状态并希望得到最好的结果。

我也知道Sys.setlocale(locale = "Russian") (链接),但它不是将每个字符解释为俄语吗?当我解析字节时,我不知道何时在我的 4 种语言之间切换。

在 Windows 操作系统上,我可以创建一个 .txt 文件并写上“??????!你好!” 在程序 Notepad++ 中,它将保存文件并以相同的字母重新打开。它是否以某种方式在每个字符后秘密添加隐形标记,以了解何时解释为俄语,何时解释为英语?


我目前的理解是:将所有内容都作为wchar_t(双字节),将任何文件解释为 UTF-16(双字节) - 是否正确?

另外,我希望保持代码跨平台。

对不起菜鸟

c++

3
推荐指数
1
解决办法
1883
查看次数

标签 统计

c++ ×3

c++11 ×1

string ×1

unicode ×1