Strings handled differently in the shell and compiled modules

Geoff Cant <>
Thu Feb 18 23:27:32 CET 2010


I've just been working on some code and came across a surprising result
and wonder if it's a bug.

If I create a module with a unicode string:

%%%%%
-module(unitest).
-export([test/0]).

test() ->
    "©|®|™|[\\-\\.!,]".
%%%%%

Then the following is true in the shell:
unitest:test() =/= "©|®|™|[\\-\\.!,]".

That is, the string literal in the module is a list of utf-8 bytes and
the shell string literal is a list of unicode codepoints; string
literals have a different value depending on their context.

Have I simply missed something in the documentation that says this is
the expected behaviour? If not, then it'd be nice if shell code and
module code behaved as similarly as possible.

Cheers,
-- 
Geoff Cant


More information about the erlang-bugs mailing list