Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Dart中ANSI转义序列的解码_Linux_Flutter_Dart_Flutter Desktop - Fatal编程技术网

Linux Dart中ANSI转义序列的解码

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

我正在为面向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 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()));
    

我真的对这种行为感到困惑,所以如果有人对此有经验,欢迎提出建议

有两种选择:

  • 清理所有日志,可视化普通文本
  • 尝试像
    less-r
    一样解码文本,将彩色文本可视化到Flutter应用程序中

编辑: 我解决了导入:
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代码以解决此问题,请参阅编辑!再次感谢:)对不起,我看不到任何建议的编辑。