使用log4cxx中的UTF-8字符
Using utf-8 characters in log4cxx
我需要能够使用log4cxx使用UTF-8编码的字符串。我可以用std::cout
打印细胞(字符正确显示)。使用log4cxx,即用ConsoleAppender
将字符串放入LOG4CXX_DEBUG()
宏将输出"?"而不是特殊角色。我找到了一个解决方案:
LOG4CXX_DECODE_CHAR(logstring, str);
LOG4CXX_DEBUG(logstring);
其中str
是我的输入字符串,但这不起作用。有人知道这可能如何工作吗?我有点谷歌,但找不到任何有用的东西。
您可以使用
setlocale(LC_CTYPE, "UTF-8");
仅设置字符编码,而无需更改有关语言环境的任何其他信息。
我遇到了相同的问题并进行了搜索和搜索。我找到了这篇文章,它可能会起作用,但我不喜欢setlocaleish
解决方案。因此,我做了更多的研究,最后解决了解决方案。
我重新配置log4cxx
并构建它,解决了问题!
在log4cxx
中添加两个配置选项:
./configure --prefx=blabla --with-apr=blabla --with-apr-util=blabla --with-charset=utf-8 --with-logchar=utf-8
希望这将帮助任何需要它的人。
一种解决方案是使用
setlocale(LC_ALL, "en_US.UTF-8");
在我的主要功能中。这对我来说是可以的,但是如果您想要更多可本质的应用程序,这可能会很难跟踪/使用。
第一个答案对我不起作用,第二个答案比我想要的要多。所以我结合了两个答案:
setlocale(LC_CTYPE, "xx_XX.UTF-8"); // or "xx_XX.utf8", it means the same
其中xx_xx是某种语言标签。我试图用多种语言将字符串与不同的字母登录(在Linux上,包括中文,语言从左到右和左至左);所以我尝试了:
setlocale(LC_CTYPE, "it_IT.UTF-8");
它可以使用任何经过测试的语言。我不明白为什么不指示语言xx_xx不起作用的简单" UTF-8",因为我使用utf8是与语言无关的,并且不应该指出一种。(如果有人也知道这样做的原因,那么答案将是一个有趣的改进)。也许这也取决于操作系统。
最后,在Linux上,您可以通过在Shell上输入来获取编码列表:
# locale -a | grep utf
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 转换特殊字符(UTF-8)
- 在C++中使用 UTF-8 字符串和字符
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何在 Visual C++ 中使用 UTF-8 字符串作为字符*?
- 读取UTF-8文件需要解析字符
- 如何正确处理渲染大小为 >= 2B 的 utf-8 字符?
- C++ UTF-8 瑞典语字符读取为 ASCII
- 如何C++ WCOUT UTF-16 编码的字符数组?
- 检查 UTF-8 是wchar_t还是字符?
- Qt UTF-8 文件到 std::string 添加额外的字符
- 字符的 UTF-8 转换
- C Unicode UTF-8解码字符的问题
- 将转义的 UTF-8 八位字节的字符数组转换为 C++ 的字符串
- 如何在没有wchar_t的情况下在 c++ 中解码/编码 UTF-8 字符
- 如何将 utf 字符转换为 windows-1252?
- 在 Linux 中将 UTF-32 宽字符转换为 UTF-16 宽字符以获取补充平面字符
- C 14:UTF-8/UTF-16与本机字符编码之间的转换
- 从键盘读取 UTF-8 编码的字符