大家!我正在编辑我的问题,以便通过代码向每个人提供有关我的问题的更清晰的信息。我还将我的输入字符串从日语更改为希腊字符串,请注意。非常感谢!
所以,就在这里。 我在下面有这个 wstring 输入:
wstring command = L"Σὲ γνωρίζω ἀπὸ τὴν κόψη";
这是将 std::wstring 转换为 std::string 的现有代码(注意:我没有创建此代码)。
string wstring2string(const wstring& str)
{
string str2(str.length(), L' ');
std::copy(str.begin(), str.end(), str2.begin());
return str2;
}
£r ³½ÉÁw¶É
此功能适用于非 UTF-8 和非 Unicode 文本。我只是无法理解为什么它也不能使用 UTF-8 文本。非常感谢大家!
这是将 std::wstring 转换为 std::string 的现有代码(注意:我没有创建此代码)。
函数只是将原始字符串中的每个代码单元复制到输出字符串中,根据
wchar_t
和char
的整数属性隐式转换代码单元的数值。实际上,这意味着所有代码单元都被简单地截断为其最低字节,从而丢失所有其他信息。该函数不考虑任何编码或任何东西。它完全坏了。
要从
std::wstring
转换为 std::string
你应该首先知道输入和输出是如何编码的(例如系统的宽和窄执行字符集编码)然后你应该使用一个 unicode 库提供这两个之间的转码编码。
C++ 标准库确实有它的函数 (https://en.cppreference.com/w/cpp/locale/wstring_convert),但由于安全和规范问题,它们已被弃用,因此不应使用或使用仔细
如果你想从原生的宽字符集编码转换为当前C语言环境的窄多字节编码,你也可以使用https://en.cppreference.com/w/cpp/string/multibyte/wcsrtombs,但是随后您还必须小心确保设置了正确的语言环境。
一个非常完整的 unicode 解决方案是 ICU,但是对于你在这里问的,你只需要它的一小部分。
在 POSIX 系统上有
iconv
.
您也可以找到第三方库。