linux和Windows平台间宽字符串的发送和接收

wj9527001 2011-11-16 03:01:26
我对linux和Windows两个平台之间发送宽字符串的理解是这样的:两个平台下的宽字符编码方式不同,但是网络传输中数据的编码是UTF8,相互之间发送数据后,需要把UTF8转化为自己的编码方式。是这样的吗,如果不对多谢更正!

请问:
1、linux和Windows下有关宽字符的编码方式各是什么啊?网上搜了好多,很乱,对什么UCS2、UCS4不是很理解。

2、两个平台下使用宽字符通信时候正确的方法是什么呢?双方都使用同样的字符集吗,用哪个,怎么设置?

求教各位了,请积极回答呀!
...全文
236 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj9527001 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luciferisnotsatan 的回复:]

引用 6 楼 wj9527001 的回复:

引用 5 楼 luciferisnotsatan 的回复:

UCS2 2字节,windows用这个
UCS4 4字节,linux用这个

嗯,是这样的。
那请问两个平台之间发送接收宽字符串该怎么做呢?有人说发送端发送的二进制和接收到的二进制是完全相同的,可是我从linux向windows发送的宽字符串接收之每两个字符之间都有0,而从……
[/Quote]
诚如7楼所说,结贴!
luciferisnotsatan 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wj9527001 的回复:]

引用 5 楼 luciferisnotsatan 的回复:

UCS2 2字节,windows用这个
UCS4 4字节,linux用这个

嗯,是这样的。
那请问两个平台之间发送接收宽字符串该怎么做呢?有人说发送端发送的二进制和接收到的二进制是完全相同的,可是我从linux向windows发送的宽字符串接收之每两个字符之间都有0,而从windows向linux发送,收到的是乱码。
……
[/Quote]
ucs4的低两字节值就是ucs2的值。

所以linux上 一个宽字符 0x0000XXXX,到了windows,就有两个0的间隔了。
同样的,windows0xXXXX, 0xYYYY 两个字符到了linux,就成了一个 0xYYYYXXXX,而不是两个宽字符0x0000XXXX,0x0000YYYY。变成乱码了

要自己转换下。linux到windows,每4字节里取低两字节。而windows到linux,每次取两个字节赋给4字节的wchar_t

此外注意大小字节序。
wj9527001 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

UCS2 2字节,windows用这个
UCS4 4字节,linux用这个
[/Quote]
嗯,是这样的。
那请问两个平台之间发送接收宽字符串该怎么做呢?有人说发送端发送的二进制和接收到的二进制是完全相同的,可是我从linux向windows发送的宽字符串接收之每两个字符之间都有0,而从windows向linux发送,收到的是乱码。
这应该是因为字符集的不同,接收之后没有转化的原因,请问该怎么转化呢,能不能说下正确的流程啊?貌似好多人对这个问题都是挺模糊的,请指教啊!
luciferisnotsatan 2011-11-16
  • 打赏
  • 举报
回复
UCS2 2字节,windows用这个
UCS4 4字节,linux用这个
ndy_w 2011-11-16
  • 打赏
  • 举报
回复
UTF-32?那就接收后从UTF-16转到UTF-32
wj9527001 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ndy_w 的回复:]

UNICODE宽字符都是2个字节表示一个字符。传输后仍然是unicode,但是要注意大小端的问题。如果协议规定的是unicode,那发送前要转换成unicode;接收后要当成unicode处理或转换。
[/Quote]

linux下wchar_t占四个字节啊?
wj9527001 2011-11-16
  • 打赏
  • 举报
回复
貌似Windows下编码是UTF16,Linux下是UTF8,所以wchar_t在Windows下占两个字节,Linux下占用四个字节,想到一个方法,发送前转化为多字节char数组,接收后再转变为各自的编码方式。

还是上面的问题,如果都使用宽字符通信,该怎么做呢?
ndy_w 2011-11-16
  • 打赏
  • 举报
回复
UNICODE宽字符都是2个字节表示一个字符。传输后仍然是unicode,但是要注意大小端的问题。如果协议规定的是unicode,那发送前要转换成unicode;接收后要当成unicode处理或转换。

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧