JavaScript Unicode 转 ASCII

3
需要将SOH值“\u0001”的unicode转换为Ascii。为什么这样做不起作用? var soh = String.fromCharCode(01); 它返回“\u0001”。 或者当我尝试 var soh = '\u0001' 它返回一个笑脸。 如何使unicode变成正确的SOH值(一个空的不可打印字符)?
2个回答

5

JS没有ASCII字符串,它们本质上是UTF-16。

在浏览器中,你运气不佳。如果你是在编写node.js,你就很幸运!

你可以使用缓冲区将字符串转换为八位字节,然后随意操纵二进制数据。但是一旦你乱搞了它,你就不会得到一个有效的字符串。

无论如何,你都需要阅读更多相关内容:

https://mathiasbynens.be/notes/javascript-encoding

或者在这里:

https://nodejs.org/api/buffer.html


编辑: 在评论中,您说您使用node.js,因此这是来自上面第二个链接的摘录。

const buf5 = Buffer.from('test');
// Creates a Buffer containing ASCII bytes [74, 65, 73, 74].

要在常见的ASCII字符串中创建嵌入SOH字符,请使用常见的转义序列\x01,如下所示:
const bufferWithSOH = Buffer.from("string with \x01 SOH", "ascii");

这应该可以解决问题。然后,您可以将bufferWithSOH内容发送到输出流,例如网络、控制台或文件流。

Node.js文档会很好地指导您如何在Buffer中使用字符串,只需查找上面的第二个链接即可。


顺便提一下,你也可以在浏览器中(以及Node)使用iconv-lite进行编码转换。 - mscdex
好的,知道了!谢谢。 - pid
我已经更新了我的回答。顺便问一下,“SHOW”是什么意思?在哪里展示?在HTML页面中吗? - pid
问题在于当我将我的消息发送到另一个服务器时,他们那边会看到'\u0001',我只是希望它能正确显示,这已经让我感到沮丧了一周... - Newbie_Techie
请查看此处:http://www.json.org/,在右侧的Backus Naur状态中针对"chars":Unicode字符!如果您想要发送二进制数据,可以将其编码为Base64二进制缓冲区,否则我认为您无法将其作为实际的JSON字符串发送,因为它采用ASCII编码(这不允许在JSON中)并且没有被列入白名单的控制字符(这也是不允许的)。 一个好的JSON过滤器会清除所有这些杂质数据。 - pid
显示剩余3条评论

0
转换为ASCII将是一个字节数组:0x00 0x01。您需要提取\u后面的Unicode代码点并调用parseInt,然后从数字中提取字节。JavaScript可能不是最适合此操作的语言。

谢谢,我有点卡在了Javascript上,非常想让它工作起来。有这方面的示例吗?我实际上从未处理过ASCII字符,任何帮助都将不胜感激。 - Newbie_Techie
你想要做什么? - Ryan
我有一个在Windows上使用Node.js编写的应用程序,它连接到一个C++服务器。问题是当我向服务器发送消息时,它显示的不是正确的"SOH" ASCII字符,而是显示笑脸或Unicode('\0001'),这不是可接受的分隔符。我需要它是空格或者它应该是的任何字符,并且对于C++应用程序可读。谢谢! - Newbie_Techie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接