【发布时间】:2012-02-20 08:46:22
【问题描述】:
在 perl 中,如果我将以下内容从 iso-8859-1 编码为 utf8。
(00000) 0a0b0111 666c6578 74696d65 05427351 ....flextime.BsQ
(00016) f4aea370 00137469 6d657374 616d7009 ...p..timestamp.
(00032) 05010541 d3c8a8a2 40000004 aff01403 ...A....@.......
(00048) 61090301 090b0104 01040204 03040404 a...............
(00064) 0501 ..
这是结果:
(00000) 0a0b0111 666c6578 74696d65 05427351 ....flextime.BsQ
(00016) c3b4c2ae c2a37000 1374696d 65737461 ......p..timesta
(00032) 6d700905 010541c3 93c388c2 a8c2a240 mp....A........@
(00048) 000004c2 afc3b014 03610903 01090b01 .........a......
(00064) 04010402 04030404 040501 ...........
如果我使用 javascript 解码 perl 结果,这就是我得到的:
00000000: 00 0b 00 01 00 11 00 66 00 6c 00 65 00 78 00 74 00 69 00 6d 00 65 00 05 00 42 00 73 00 51 4b a3 |flextimeBsQ.|
00000016: 00 70 00 00 00 13 00 74 00 69 00 6d 00 65 00 73 00 74 00 61 00 6d 00 70 00 09 00 05 00 01 00 05 |ptimestamp.|
00000032: 00 41 04 c8 88 80 00 00 00 00 00 04 fc 14 00 03 00 61 00 09 00 03 00 01 00 09 00 0b 00 01 00 04 |A...a..|
00000048: 00 01 00 04 00 02 00 04 00 03 00 04 00 04 00 04 00 05 00 01 .. .. .. .. .. .. .. .. .. .. .. .. | |
谁能帮我解决这个问题?源是从 flash 发送到 perl 服务器的 AMF 对象,该服务器将其重新发送到 javascript。发送数据的方式(从 flash 到 perl 到 javascript)不会改变任何数据。
perl中的代码是:
use Encoding;
from_to($out,"iso-8859-1","utf8",Encode::FB_WARN);
如果我在 perl 中使用默认的 utf8 编码,我会得到相同的结果。
这已更新为包含十六进制转储而不是二进制。 我需要一个 perl 中的编码方法,它将返回与 javascript 相同的结果。可以测试using this page。
任何帮助将不胜感激。
【问题讨论】:
-
为什么要编码二进制数据?编码对文本字符串有意义。
-
您粘贴了binary data 并搞砸了,即使我们进行替换,它也无法使用,会丢失 NUL 等不可打印的字符。 Edit your question 并改为发布 hexdump。
-
Websockets(javascript 连接)只能传输或接收 utf8 编码的字符串。如果您传输任何其他内容,它会抱怨并断开连接。
-
如果您尝试通过不支持发送原始八位字节的连接发送二进制数据,那么您最好的选择可能是使用 Base64 或类似方法以安全传输的方式对数据进行编码。
标签: javascript perl encoding utf-8