-3

我知道关于这个话题已经有很多问题了,但我在这里面临着一个非常不寻常的情况。

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

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

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

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

使用widechartomultibyte API 在windows 中相同的字符串转换是成功的。

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

希望高手能帮帮我。

编辑

我的宽字符串是 L"\006£æ?Jÿ" 转换并显示给用户时变成图像在此处输入图像描述

4

1 回答 1

0

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

我怀疑你没有WC_ERR_INVALID_CHARS在 Windows 上使用。那将捕获相同的错误。

于 2015-07-29T14:31:39.630 回答