我在从字符串中删除非utf8字符时遇到问题,这些字符无法正常显示.字符是这样的0x97 0x61 0x6C 0x6F(十六进制表示)
删除它们的最佳方法是什么?正则表达式还是其他什么?
我使用节点ws库(Ubuntu 16.04上的节点10.8.0)连接到外部websocket api .我有一个监听器只是解析json并将其传递给回调:
this.ws.on('message', (rawdata) => {
let data = null;
try {
data = JSON.parse(rawdata);
} catch (e) {
console.log('Failed parsing the following string as json: ' + rawdata);
return;
}
mycallback(data);
});
Run Code Online (Sandbox Code Playgroud)
我现在收到错误,其中的rawData外观如下(我格式化并删除了不相关的内容):
?~A
{
"id": 1,
etc..
}?~?
{
"id": 2,
etc..
Run Code Online (Sandbox Code Playgroud)
然后我想知道; 这些人物是什么?看到结构我最初认为第一个奇怪的符号必须是数组([)的开括号,第二个是逗号(,),以便它创建一个对象数组.
然后,rawdata每当遇到JSON解析错误时,我都会通过写入文件来进一步调查问题.在一个小时左右的时间里,它已经保存了大约1500个错误文件,这意味着这种情况会发生很多.我cat在终端上编了几个这样的文件,其中我上传了一个例子:
这里有一些有趣的事情:
我对websockets不太熟悉,但可能是因为我的websocket以某种方式接收到它连接在一起的消息流,这些奇怪的符号作为分隔符,然后随机切断最后一条消息?也许是因为我得到了一个非常快速的消息流?
或者可能是因为服务器端的错误(或功能),它组合了这些单独的消息?
有谁知道这里发生了什么?欢迎所有提示!
[编辑]
@bendataclear建议将其解释为utf8.所以我做了,我粘贴了下面结果的截图.第一个打印是原样,第二个打印为utf8.对我来说这看起来不像什么.我当然可以转换为utf8,然后按这些字符拆分.虽然最后一条消息总是被切断,但这至少会使一些消息变得可读.其他想法仍然欢迎.
我知道转义函数已被弃用,你应该使用encodeURI或encodeURIComponent.但是,encodeUri和encodeUriComponent与escape不同.
我想在javascript中创建一个与瑞典åäö的mailto链接.以下是escape,encodeURIComponent和encodeURI之间的比较:
console.log("mailto:?subject="+escape(subject)+"&body=" + escape(body));
console.log("mailto:?subject="+encodeURIComponent(subject)+"&body=" + encodeURIComponent(body));
console.log("mailto:?subject="+encodeURI(subject)+"&body=" + encodeURI(body));
Output:
mailto:?subject=My%20subject%20with%20%E5%E4%F6&body=My%20body%20with%20more%20characters%20and%20swedish%20%E5%E4%F6
mailto:?subject=My%20subject%20with%20%C3%A5%C3%A4%C3%B6&body=My%20body%20with%20more%20characters%20and%20swedish%20%C3%A5%C3%A4%C3%B6
mailto:?subject=My%20subject%20with%20%C3%A5%C3%A4%C3%B6&body=My%20body%20with%20more%20characters%20and%20swedish%20%C3%A5%C3%A4%C3%B6
Run Code Online (Sandbox Code Playgroud)
只有使用"转义"创建的mailto链接才能使用IE或Chrome在Outlook中打开格式正确的邮件.当使用encodeURI或encodeURIComponent时,主题说:
My subject with åäö
Run Code Online (Sandbox Code Playgroud)
身体也看起来搞砸了.
还有其他一些功能,除了我可以用来获取工作mailto链接吗?