String 是否有外部库或简单函数来替换/删除颤振(dart)字符串中的特殊字符

String 是否有外部库或简单函数来替换/删除颤振(dart)字符串中的特殊字符,string,flutter,http,dart,txt,String,Flutter,Http,Dart,Txt,我是如何从txt文件中获取数据的 Future<String>? get textAsString async { Uri? uri = Uri.tryParse(text.url); if (uri != null) { String text = await http.read(uri); return text; } return ''; } 未来?获取文本字符串异步{ Uri?Uri=Uri.tryParse(text.url); if(ur

我是如何从txt文件中获取数据的

Future<String>? get textAsString async {
  Uri? uri = Uri.tryParse(text.url);
  if (uri != null) {
    String text = await http.read(uri);
    return text;
  }
  return '';
}
未来?获取文本字符串异步{
Uri?Uri=Uri.tryParse(text.url);
if(uri!=null){
String text=wait http.read(uri);
返回文本;
}
返回“”;
}
我的小部件结构和代码布局

FutureBuilder<String>(
  future: currentScene.textAsString,
  builder: (context, snapshot) {
    String? text = snapshot.data;
    if (snapshot.hasData && text != null) {
      return ListView(
        padding: kAppPadding,
        controller: _controller,
        children: [
         Text(
           text,
           style: TextStyle(
             height: 1.8,
             fontFamily: 'Roboto',
             color: kWhiteColor,
             fontWeight: FontWeight.w300,
             fontSize: 17,
           ),
         ),
        ],
      );
          } else if (snapshot.hasError) {
            return Center(
              child: AppErrorText(
                onPressed: () {},
              ),
            );
          } else {
            return Center(
              child: AppProgressIndicator(),
            );
          }
        })
FutureBuilder(
future:currentScene.textAsString,
生成器:(上下文,快照){
String?text=snapshot.data;
if(snapshot.hasData&&text!=null){
返回列表视图(
填充:Kappadding,
控制器:_控制器,
儿童:[
正文(
文本,
样式:TextStyle(
身高:1.8,
fontFamily:“机器人”,
颜色:kWhiteColor,
fontWeight:fontWeight.w300,
尺寸:17,
),
),
],
);
}else if(snapshot.hasrerror){
返回中心(
孩子:apperrertext(
按下:(){},
),
);
}否则{
返回中心(
子项:AppProgressIndicator(),
);
}
})
我在云存储中存储了一个TXT url,我想检索文本并创建一个文本阅读器应用程序

我使用http.read(uri)获取TXT文件的内容,并将字符串传递给用FutureBuilder包装的文本小部件


我注意到字符串包含一些奇怪的字符(–)。。。因此,我正在寻找一种删除/替换这些字符的方法。

我不确定是否有外部库,但您可以使用ASCII码来识别空间字符。 这是空间字符的ASCII码

ASCII = 32 to 47 // 32 is a code for blank space
ASCII = 58 to 64 
ASCII = 91 to 96 
ASCII = 123 to 126
在flatter中,您可以获得字符串的ASCII值,如下所示

 String _string = 'Hello @World#';
 List<int> asciiList = _string.codeUnits;
 String newString = _string;

 for (int i = 0; i < asciiList.length; i++) {
 if (asciiList[i] >= 33 && asciiList[i] <= 47 ||  //we don't want to remove blank space so we start from 33
     asciiList[i] >= 58 && asciiList[i] <= 64 ||
     asciiList[i] >= 91 && asciiList[i] <= 96 ||
     asciiList[i] >= 123 && asciiList[i] <= 126) {
        newString = newString.replaceAll(_string[i], '');
      } else {
         print("It's not a spacial character");
        }
     }

    print(newString);  //Hello world
String _String='Hello@World#';
列出ASCILIST=_string.codeUnits;
字符串newString=\u字符串;
for(int i=0;i如果我们在评论中的讨论怀疑(asciiList[i]>=33&&asciiList[i],这是由于类型编码

因为,它是服务器上的
.txt
文件,而不是
字符串
。您需要使用
解码器
以正确的格式获取数据

这样用,

加上这些进口

import 'dart:convert';
import 'dart:io';
然后更改
textAsString
函数

Future<String>? get textAsString async {
    Uri uri = Uri.parse('https://firebasestorage.googleapis.com/v0/b/fantasyapp-c636c.appspot.com/o/AppContent%2FScenes%2F0Hmv9ZZL2tunZAQh%2FScene%202.txt?alt=media&token=48fe5c72-9584-4c52-941e-b9c5859b9479');
    return await new HttpClient()
        .getUrl(uri) // Reads the data
        .then((HttpClientRequest request) => request.close()) // Then closes the request to return us the Future of response
        .then((HttpClientResponse response) => 
            response.transform(new Utf8Decoder()).join()); // transforms the response using UTF-8 
}
Future?获取文本字符串异步{
Uri=Uri.parse('https://firebasestorage.googleapis.com/v0/b/fantasyapp-c636c.appspot.com/o/AppContent%2FScenes%2F0Hmv9ZZL2tunZAQh%2FScene%202.txt?alt=media&token=48fe5c72-9584-4c52-941e-b9c5859b9479’;
返回等待新的HttpClient()
.getUrl(uri)//读取数据
.then((HttpClientRequest request)=>request.close())//然后关闭请求以返回未来的响应
.然后((HttpClientResponse响应)=>
response.transform(新的Utf8Decoder()).join();//使用UTF-8转换响应
}

您将哪些字符归类为
特殊的
?我建议您显示这些字符的方式是错误的。您不需要外部库来实现这一点。@很抱歉回复太晚……如果您查看应用程序屏幕截图,您可以看到一些奇怪的字符,如(–).@user207421我刚刚将字符串传递给一个用未来生成器包装的文本小部件。@Rezia小部件代码或获取和处理数据的方法一定有问题。请用代码的更多细节更新您的问题,因为这不正常。嘿,谢谢您的帮助。您的解决方案工作得很好。