od output is confusing
Problem solved:
It's because of endianess of output.
There is an option --endian which by default is little.
The example string was cá, which translates to 63 C3 A1 utf-8 encoded:
~ $ echo -n cá | od --endian=big -x
0000000 63c3 a100
0000003

(The -n prevents \n in the end of string, making last byte 00)
So it's exactly the same output, but with bytes inverted:
~ $ echo -n cá | od --endian=little -x
0000000 c363 00a1
0000003

(c363 instead of 63c3 and so forth).