gpt4 book ai didi

flutter - 如何反转给定单词中的阿拉伯字母并保存字母的形式?

转载 作者:行者123 更新时间:2023-12-03 03:49:17 25 4
gpt4 key购买 nike

我是 Dart 和 Flutter 的初学者:
假设我想反转这个单词中的阿拉伯字母:'ممم',正如你所看到的,这是一个唯一的字母(发音为 m),在一个单词中的树位置具有树形:

  • 初始位置 rtl : ﻣ
  • 中间位置 rtl : ﻤ
  • 最终位置 rtl : م

  • 最终结果应该是:ﻢﻤﻣ
    由于 codeUnits 和 runes 对保存每个字符非常强大,所以我想使用 codeUnits 来保存单词的字母。这将保存字母的形式:它是在初始位置、中间位置还是最终位置。这类似于a:Åǻǻẚặằằẳẵȃȃậậấấấẫẩẩẩẩẩẩẩẩẩảảảảảảả ȧ Ǡ ǡ Ạ ạ Ä ä Ǟ ǟ À à Ȁ ȁ Á á Ā ā Ā̀ ā̀ ã ã Ą ą Ą́ ą́ Ą̃ ą̃ A̲ a̲ ᶏ...
    问题是 Flutter 无法区分这三种形式,所以在 Unicode 中如果打印结果会得到相同的数字 [1605,1605,1605] 所以相同的单词 'ممم',在 Unicode 中应该是[65251,65252,65250]
    import 'package:flutter/material.dart';

    void main() {
    runApp(MyApp());
    }

    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    theme: ThemeData(
    primarySwatch: Colors.blue,
    visualDensity: VisualDensity.adaptivePlatformDensity,
    ),
    home: MyHomePage(),
    );
    }
    }

    class MyHomePage extends StatelessWidget {
    String flipText() {
    var myWord = 'ممم';
    var myWordToRunes = myWord.codeUnits.toList();
    var myWordToCodeUnitsReversed = myWordToRunes.reversed.toList();
    var transformCodeUnitsToLetters =
    String.fromCharCodes(myWordToCodeUnitsReversed);
    return '$transformCodeUnitsToLetters';
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('SPLIT IT'),
    ),
    body: Center(
    child: Column(
    children: <Widget>[
    Text(
    'FINAL RESULT ﻢﻤﻣ',
    style: TextStyle(fontSize: 43),
    ),
    Container(
    margin: EdgeInsets.all(20),
    child: Text(
    flipText(),
    textDirection: TextDirection.rtl,
    textAlign: TextAlign.center,
    style: TextStyle(fontSize: 43),
    ),
    ),
    ],
    ),
    ),
    );
    }
    }

    最佳答案

    这与 Unicode 无关。它与字体定义有关。所有三个字符都是 U+0645 (م)。在文本渲染期间,字体将为不同的上下文执行字形替换(而不是字符替换)。它在任何时候都不会将您的数据 (U+0645) 转换为其他 Unicode 代码点 (U+FEE3 ﻣ、U+FEE4 ﻤ、U+FEE2 ﻢ)。它只是改变了 U+0645 的绘制方式。
    (如果你在编辑器中打开这篇文章,你会注意到字体的重要性。在 Stack Overflow 的“显示字体”中,据我所知,U+FEE3 和 U+FEE4 是相同的,但在“编辑字体”中”,至少在 Safari 中,它们是完全不同的。)
    您正在寻找的是一个阿拉伯语 Presentation Forms-B 转换器,它不是我所知道的任何 Unicode 库的标准部分。我见过的唯一实现是在 Objective-C ,并且应该可以直接转换为其他语言,但请注意此代码是根据 GPL 许可的。
    您可能会找到一个可以为您进行转换的库,但我希望您可能必须自己开发一些东西。我怀疑是否已经编写了原生 Dart 解决方案。
    或者,如果文本是静态的,您可以将演示表单代码点直接嵌入到您的代码中。与其在键盘上键入 meem,不如从 Unicode 代码点列表中复制所需的确切形式。我个人使用fileformat.info广泛或这个。

    var myWord = 'ﻣﻤﻢ';
    // Typed as: ﻣ ﻤ ﻢ
    有关 C++ 的更多讨论,请参阅 Arabic: 'source' Unicode to final display Unicode

    关于flutter - 如何反转给定单词中的阿拉伯字母并保存字母的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64179913/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com