我的平台是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坚持下去,那么处理上述问题的最佳做法是什么?
我已经尝试搜索stackoverflow来找到答案,但我发现的问题和答案大约是10岁,由于变化和可能的进展,我似乎无法就该主题达成共识.
我知道在stl之外有几个库可以处理unicode-
stl(wstring,codecvt_utf8)有一些功能,但人们似乎对使用感到矛盾,因为他们处理UTF-16这个网站:(utf-8无处不在)说不应该使用和许多人网上似乎同意这个前提.
我唯一想要的是能够用unicode字符串做4件事 -
从我可以告诉icu处理这个和更多.我想知道的是,在Linux,Windows和MacOS上有一种标准的处理方式.
感谢您的时间.
了解 unicode、语言环境、宽字符和转换对我来说是一次可怕的经历。
我需要读取包含俄语和英语,中国和乌克兰字符的文本文件一次全部
我的方法是以字节块读取文件,然后对块进行操作,在单独的线程上进行快速读取。(关联)
这是使用 std::ifstream.read(myChunkBuffer, chunk_byteSize)
但是,我知道如果我坚持使用char.
就此而言,我将一切都转化wchar_t为最佳状态并希望得到最好的结果。
我也知道Sys.setlocale(locale = "Russian") (链接),但它不是将每个字符解释为俄语吗?当我解析字节时,我不知道何时在我的 4 种语言之间切换。
在 Windows 操作系统上,我可以创建一个 .txt 文件并写上“??????!你好!” 在程序 Notepad++ 中,它将保存文件并以相同的字母重新打开。它是否以某种方式在每个字符后秘密添加隐形标记,以了解何时解释为俄语,何时解释为英语?
我目前的理解是:将所有内容都作为wchar_t(双字节),将任何文件解释为 UTF-16(双字节) - 是否正确?
另外,我希望保持代码跨平台。
对不起菜鸟