 
     lacc =
       case category do
-        "L" <> _ -> [to_binary.(codepoint) | lacc]
+        "L" <> _ -> [String.to_integer(codepoint, 16) | lacc]
         _ -> lacc
       end
 

    |> IO.iodata_to_binary()
end

{codes, letters, non_breakable, decompositions, combining_classes} =
  Enum.reduce(File.stream!(data_path), {[], [], [], %{}, %{}}, fn line, {cacc, lacc, wacc, dacc, kacc} ->
    [
      codepoint,
      _name,


  def downcase(string) when is_binary(string), do: downcase(string, "")

  defp downcase(<<0x03A3::utf8, codepoint::utf8, rest::bits>>, acc) do
    downcased =
      case letter?(codepoint) do
        true -> 0x03C3
        false -> 0x03C2
      end

    downcase(<<codepoint::utf8, rest::bits>>, <<acc::binary, downcased::utf8>>)
  end

  defp downcase(<<0x03A3::utf8, rest::bits>>, acc) do
    downcase(rest, <<acc::binary, 0x03C2::utf8>>)
  end
