Linux Dart中ANSI转义序列的解码
我正在为面向linux_x64的Flitter桌面编写一些代码。Linux Dart中ANSI转义序列的解码,linux,flutter,dart,flutter-desktop,Linux,Flutter,Dart,Flutter Desktop,我正在为面向linux_x64的Flitter桌面编写一些代码。 我正在从一些应用程序中提取一些日志,这些日志呈现如下语法: m = "h\x1b[34mello\x1b(A.\x1b[H" # Text full of random escape sequences c = 0 # A count variable p = True # Are we not in an escape sequence? o = "" # The output varia
我正在从一些应用程序中提取一些日志,这些日志呈现如下语法:
m = "h\x1b[34mello\x1b(A.\x1b[H" # Text full of random escape sequences
c = 0 # A count variable
p = True # Are we not in an escape sequence?
o = "" # The output variable
for l in m:
if l == "\x1b":
p = False
elif p:
o += l
elif l in "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm": # Most (maybe all) escape sequences end in letters.
p = True
c += 1 # Move on to the next letter in the input string
print(o) # Text without escape sequences
- 使用
less日志文件检查日志文件
ESC(BESC[mauthentication-msESC(BESC[m
- 使用
我可以在终端中看到彩色文本less-r日志文件检查日志文件
- 使用
我可以在终端中看到彩色文本cat日志文件检查日志文件
- 使用
cat-vte日志文件检查日志文件
^[(B^[[mauthentication-ms^[(B^[[m$
- 在颤振中使用此代码
Future<String> readAsString = file.readAsString(); readAsString.then((String value) => _log = utf8.decode(value.runes.toList()));
我真的对这种行为感到困惑,所以如果有人对此有经验,欢迎提出建议 有两种选择:
- 清理所有日志,可视化普通文本
- 尝试像
一样解码文本,将彩色文本可视化到Flutter应用程序中less-r
编辑: 我解决了导入:
tint:^2.0.0
并更改Dart代码(使用tint插件中的strip()
方法),如下所示:
Future<String> readAsString = file.readAsString();
readAsString.then((String value) => _log = value.strip());
Future readAsString=file.readAsString();
readAsString.then((字符串值)=>\u log=value.strip());
这些有趣的字符被称为转义序列,程序使用它们打印颜色和斜体等等
终端被设计用来解码这些转义序列,但常规程序不知道如何处理它们
less
和cat
正在精确打印文件中的内容,是您在其中运行它们的终端对它们进行解码
您必须让您的程序通过并用如下代码删除所有转义序列:
m = "h\x1b[34mello\x1b(A.\x1b[H" # Text full of random escape sequences
c = 0 # A count variable
p = True # Are we not in an escape sequence?
o = "" # The output variable
for l in m:
if l == "\x1b":
p = False
elif p:
o += l
elif l in "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm": # Most (maybe all) escape sequences end in letters.
p = True
c += 1 # Move on to the next letter in the input string
print(o) # Text without escape sequences
如果你可以随意更改的话,我找不到比这个问题更具解释性的标题了
less
和cat
没有解码文本,您的终端正在解码。您需要做的是创建一个函数,该函数遍历字符串并删除\x1b
字符和字母之间的所有字符。等等,我刚刚意识到您没有使用Python。不管怎么说,代码应该做这类事情。不要担心语言,我会尝试在Dart中做同样的事情。不管怎样,谢谢你,不是的,这对我来说更重要。谢谢你的时间和解释。我将向您更新我将使用的代码。如果要集成dart代码以解决此问题,请参阅编辑!再次感谢:)对不起,我看不到任何建议的编辑。