我知道有很多关于这个主题的问题,但我在这里遇到了一个非常不寻常的情况。
我在Centos工作。我的应用程序在wchar_t中读取一些数据并以多字节(UTF-8编码)进行转换,并在google proto消息中填充char缓冲区并发送到另一个应用程序。
另一个应用程序将其再次转换为宽字符串并将其显示给用户。我正在使用wcstombs进行转换。我的语言环境是“en_US.UTF-8”。
对于某些字符串,它工作正常。我在一个特殊的宽字符串(可能还有其他几个)中遇到问题,其中wcstombs返回-1。错误号设置为84(多字节或宽字符无效或不完整)。
问题是,当我通过eclipse运行我的应用程序时,转换成功但是当我的应用程序从root(作为服务)运行时,转换失败。
使用widechartomultibyte API在Windows中成功进行相同的字符串转换。
我无法理解为什么会这样。
希望专家可以帮助我。
修改
答案 0 :(得分:0)
L"\006"
似乎不是有效的unicode字符串(UTF-16和UTF-32都不是)。我同意wcstombs
,没有相应的UTF-8序列。
我怀疑你在Windows上没有使用WC_ERR_INVALID_CHARS
。那会遇到同样的错误。