相关疑难解决方法(0)

从字符串中删除非utf8字符

我在从字符串中删除非utf8字符时遇到问题,这些字符无法正常显示.字符是这样的0x97 0x61 0x6C 0x6F(十六进制表示)

删除它们的最佳方法是什么?正则表达式还是其他什么?

php regex

102
推荐指数
13
解决办法
16万
查看次数

如何处理奇怪的组合websocket消息?

我使用节点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在终端上编了几个这样的文件,其中我上传了一个例子:

在此输入图像描述

这里有一些有趣的事情:

  1. 文件始终以这些奇怪的标志之一开始.
  2. 这些文件似乎存在于应该单独接收的多条消息中.奇怪的标志将这些个别信息分开.
  3. 文件总是以未完成的json对象结束.
  4. 这些文件的长度各不相同.它们的尺寸并不总是相同,因此不会在特定长度上切断.

我对websockets不太熟悉,但可能是因为我的websocket以某种方式接收到它连接在一起的消息流,这些奇怪的符号作为分隔符,然后随机切断最后一条消息?也许是因为我得到了一个非常快速的消息流?

或者可能是因为服务器端的错误(或功能),它组合了这些单独的消息?

有谁知道这里发生了什么?欢迎所有提示!

[编辑]

@bendataclear建议将其解释为utf8.所以我做了,我粘贴了下面结果的截图.第一个打印是原样,第二个打印为utf8.对我来说这看起来不像什么.我当然可以转换为utf8,然后按这些字符拆分.虽然最后一条消息总是被切断,但这至少会使一些消息变得可读.其他想法仍然欢迎.

在此输入图像描述

javascript json stream websocket node.js

23
推荐指数
1
解决办法
1361
查看次数

更换javascript转义?

我知道转义函数已被弃用,你应该使用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链接吗?

javascript mailto encoding escaping

9
推荐指数
3
解决办法
6402
查看次数

标签 统计

javascript ×2

encoding ×1

escaping ×1

json ×1

mailto ×1

node.js ×1

php ×1

regex ×1

stream ×1

websocket ×1