Linux宽字符串到多字节的问题

时间:2015-07-29 11:03:30

标签: c++ linux widechar

我知道有很多关于这个主题的问题,但我在这里遇到了一个非常不寻常的情况。

我在Centos工作。我的应用程序在wchar_t中读取一些数据并以多字节(UTF-8编码)进行转换,并在google proto消息中填充char缓冲区并发送到另一个应用程序。

另一个应用程序将其再次转换为宽字符串并将其显示给用户。我正在使用wcstombs进行转换。我的语言环境是“en_US.UTF-8”。

对于某些字符串,它工作正常。我在一个特殊的宽字符串(可能还有其他几个)中遇到问题,其中wcstombs返回-1。错误号设置为84(多字节或宽字符无效或不完整)。

问题是,当我通过eclipse运行我的应用程序时,转换成功但是当我的应用程序从root(作为服务)运行时,转换失败。

使用widechartomultibyte API在Windows中成功进行相同的字符串转换。

我无法理解为什么会这样。

希望专家可以帮助我。

修改

我的宽字符串是L“\ 006£??Jÿ”,当转换并显示给用户时,它变为图像enter image description here

1 个答案:

答案 0 :(得分:0)

L"\006"似乎不是有效的unicode字符串(UTF-16和UTF-32都不是)。我同意wcstombs,没有相应的UTF-8序列。

我怀疑你在Windows上没有使用WC_ERR_INVALID_CHARS。那会遇到同样的错误。