相关文章推荐
坚强的南瓜  ·  Android ...·  1 月前    · 
讲道义的硬盘  ·  Day ...·  1 年前    · 

项目中在写入包时遇到一个字节溢出的问题

在输入文字内容或者符号内容时收到了提示报错

Unhandled Exception: RangeError (index): Index out of range: index should be less than 256: 65308

原因分析:

在输入字符串是使用了codeUnits 而codeUnits在Dart中是一个不可修改的UTF-16编码组列表

  /// An unmodifiable list of the UTF-16 code units of this string.
  List<int> get codeUnits;

如果输入内容为文字或者符号 (文字符号的字节为2,emoji为3) 得到的值是utf-16编码组 而写入时是以utf-8 所以导致溢出

  List<int> createData() {
    List<int> pkgData = [];
    pkgData.add(type);
    pkgData.addAll(data.codeUnits);
    return pkgData;

解决方案:

使用utf8.encode()方法把输入内容转换为utf8编码组

List<int> createData() {
    List<int> pkgData = [];
    pkgData.add(type);
    // pkgData.addAll(data.codeUnits);
    pkgData.addAll(utf8.encode(data));
    return pkgData;
                    如果输入内容为文字或者符号 (文字符号的字节为2,emoji为3) 得到的值是utf-16编码组 而写入时是以utf-8 所以导致溢出。在输入字符串是使用了codeUnits 而codeUnits在Dart中是一个不可修改的UTF-16编码组列表。使用utf8.encode()方法把输入内容转换为utf8编码组。
class Hex{
  /// Creates a `Uint8List` by a hex string.
  static Uint8List createUint8ListFromHexString(String hex) {
    if (hex == null) throw new ArgumentError("hex is null");
    var result = new U.
				
flutter字符串如何为字节数组bytes? 链接: http://www.findsrc.com/article/flutter_string_to_bytes. String foo = 'Hello world'; //字符串utf8 List<int> bytes = utf8.encode(foo); print(bytes); //[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] //再将字节列表字符串 Strin
* 看是否是继承statelesswidget还是stafulwidget * 如果是纯展示的,没有和用户交互的就用statelesswidget, * 但是例如和用户交互例如搜索框,就用stafulwidget StatelessWidget继承自widget,而@immutable abstract class Widget extends Dia... 不要将变量明确初始化为null。 如果变量具有不可为null的类型,则如果在未明确初始化变量之前尝试使用它,则Dart会报告编译错误。如果该变量可为空,则将null为您隐式初始化为。Dart中没有“未初始化的内存”的概念,也不需要显式地将变量初始化null为“安全”。 Item? bestItem; Item? bestItem = null; 请勿使用明确的默认值null。 如果将可为空的参数设置为可选参数,但未给其提供默认值,则该语言将隐式null用作. 参考:https://www.cnblogs.com/yangyxd/p/9168271.html import 'dart:io' ; import 'dart:math' show Random; import 'dart:async'; import 'package:http/http.dart' as Http; * 请求响应数据 cla...
QString GBK2UTF8(const QString &str) QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); return utf8->toUnicode(str.toUtf8()); QString UTF82GBK(const QString &str) QTextCodec *gbk = QTextCodec::codecForName("GB18030");
Flutter中,将字符串换为整数可以使用内置的int.parse()函数。该函数将字符串作为参数,并尝试将其换为整数。如果字符串不是有效的整数表示形式,则会引发FormatException。 以下是将Flutter字符串换为整数的示例代码: ```dart String str = "123"; int num = int.parse(str); 在上面的示例中,字符串"123"被换为整数123并赋值给变量num。 需要注意的是,如果字符串无法换为整数,将引发FormatException。因此,在进行字符串换之前,我们需要确保字符串是一个有效的整数表示形式。 对于提到的数据溢出问题,可以使用try-catch语句来捕捉异常并处理它。例如: ```dart String str = "12345678901234567890"; try { int num = int.parse(str); // 处理成功换的整数 num } catch (e) { // 处理字符串换为整数时的异常情况 通过在try块中执行换操作并在catch块中处理异常,可以更好地控制字符串换为整数时可能出现的数据溢出问题。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [string化成int,double,bool](https://download.csdn.net/download/walker19900515/8800053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Flutter 16进制数字符串 int](https://blog.csdn.net/weixin_34319999/article/details/91369275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
CSDN-Ada助手: 恭喜您写出了第一篇博客!字符串转UTF-8这个话题很实用,感谢您的分享。接下来,您可以考虑扩展一下这个话题,比如介绍一下字符串转其他编码格式的方法,或者结合实际应用场景,分享一下您的实践经验。期待您的下一篇博客! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦!