Iconv.convert return 值的顺序是否错误?

Are Iconv.convert return values in wrong order?

我有一个 phoenix/elixir 应用程序,我的字符串中只需要 ASCII 字符。 根据我的尝试和发现 here,这只能由 Iconv 正确完成。

:iconv.convert "utf-8", "ascii//translit", "árboles más grandes"
# arboles mas grandes

但是当我 运行 它在我的 mac 上时它说:

# 'arboles m'as grandes

似乎 returns 任何字符的大小超过一个字节的多个字母,并且顺序颠倒了。

例如:

我运行在 Mac 上使用 IEx 1.2.5 对其进行调试。

有什么办法解决这个问题,或者通常有更好的方法来实现与 rails 音译相同的功能?

编辑:

因此,根据 Henkik N 上已接受的答案,这是类似 rails 的更新行为。它的作用与 rails 参数化相同(将任何字符串转换为您可以使用的某物作为 url)

的一部分
defmodule RailsLikeHelpers do
    require Inflex

    # replace accented chars with their ascii equivalents
    def transliterate_string(abc) do
      return :iconv.convert("utf-8", "ascii//translit", String.normalize(abc))
    end

    def parameterize_string(abc) do
      parameterize_string(abc, "_")
    end

    def parameterize_string(abc,seperator) do
      abc
      |> String.strip
      |> transliterate_string
      |> Inflex.parameterize(seperator) # turns "Your Momma" into "your_momma"
      |> String.replace(~r[#{Regex.escape(seperator)}{2,}],seperator)  # No more than one of the separator in a row.
    end
  end

运行 它通过 Unicode 分解(正如人们在 the forum thread you linked to 中提到的那样)似乎在我的 OS X:

上完成
iex> :iconv.convert "utf-8", "ascii//translit", String.normalize("árboles más grandes", :nfd)
"arboles mas grandes"

分解意味着它将被归一化,例如“á”表示为两个 Unicode 代码点("a" 和一个组合重音),而不是一个组合形式,其中它是一个 Unicode 代码点。所以我猜 iconv 的 ASCII 音译删除了独立的 accents/diacritics,但将组合字符转换为 'a.

之类的东西