String.valid?/1
I was recently working on a project that involved printing the contents of a file in an Elixir app. This is generally simple using File.read
, but an issue arose when trying to print the contents of a binary file. The unusual bytes caused errors while trying to print.
While there is no way to be 100% sure a file is binary (mime or even file extension can help), one way to at least ensure we could print the file contents in Elixir was to use String.valid?
.
This is the entire implementation from the Elixir 1.11 source:
def valid?(<<_::utf8, t::binary>>), do: valid?(t)
def valid?(<<>>), do: true
def valid?(_), do: false
You can see it tries to cast each character as UTF-8. If it reaches the end of the string, it is valid - super simple, right?
Tweet