How to remove diacritics (accents) from a string?

后端 未结 3 979
鱼传尺愫
鱼传尺愫 2021-01-06 04:49

I\'m trying to convert some strings that are in Czech, Spanish, French etc. I\'d like to take out the accent marks in the letters while keeping the letter. (E.g. convert é t

3条回答
  •  Happy的楠姐
    2021-01-06 04:54

    Here's my adaptation of Leonardo's solution. It extends the string class for ease of use and uses SplitMapJoin instead of a for loop:

    extension DiacriticsAwareString on String {
      static const diacritics =
          'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž';
      static const nonDiacritics =
          'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz';
    
      String get withoutDiacriticalMarks => this.splitMapJoin('',
          onNonMatch: (char) => char.isNotEmpty && diacritics.contains(char)
              ? nonDiacritics[diacritics.indexOf(char)]
              : char);
    }
    

提交回复
热议问题