首页 > 解决方案 > 将 int 列表解码为 utf8 时出现问题

问题描述

我有这三个来自 ascii 表的十进制字符代码列表。

[27, 91, 50, 74, 27, 91, 109, 27, 91, 72, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 105, 110, 100, 111, 119, 115, 32, 91, 86, 101, 114, 115, 105, 111, 110, 32, 49, 48, 46, 48, 46, 49, 57, 48, 52, 49, 46, 51, 56, 56, 93, 27, 93, 48, 59, 67, 58, 92, 87, 73, 78, 68, 79, 87, 83, 92, 115, 121, 115, 116, 101, 109, 51, 50, 92, 99, 111, 110, 104, 111, 115, 116, 46, 101, 120, 101, 7, 27, 91, 63, 50, 53, 104, 10]
[40, 99, 41, 32, 50, 48, 50, 48, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10]
[27, 91, 53, 50, 88, 10]

当我解码为 UTF-8 时,我有这个。

[2J[m[HMicrosoft Windows [Version 10.0.19041.388]]0;C:\WINDOWS\system32\conhost.exe[?25h
(c) 2020 Microsoft Corporation. All rights reserved.
[52X

我怎样才能避免这些特殊字符?我注意到“escape”(27)字符导致它。

标签: encodingutf-8asciidecodeencode

解决方案


这些是ANSI 转义码。它们控制文本终端和终端仿真器的行为和外观:例如,它们可以清除屏幕、移动光标或更改文本颜色。

这些代码可能会变得非常复杂,尤其是样式格式,但是您给出的示例中的代码很容易识别并使用正则表达式删除。您无需标记编程语言,但您可以在 JavaScript 中执行此操作。

var with_ansi_escapes = "\033[2J\033[m\033[HHello"

var without_ansi_escapes = with_ansi_escapes.replace(/\033\[\d*[A-Za-z]/g, "")

推荐阅读