Estou tentando escrever um shell estritamente compatível com POSIX, mas o padrão não deixa claro como ir de bytes para caracteres. Ele diz para usar LC_CTYPE
, que vincula ainda mais ao conceito de um arquivo charmap , mas em nenhum lugar é declarado onde esses arquivos charmap estão localizados e como lê-los. man 5 charmap
diz que eles geralmente estão localizados em /usr/share/i18n/charmaps
, mas isso não é o suficiente para mim. Além disso, no meu sistema Linux, os arquivos naquele diretório são codificados em gzip, o que eu acho que pode não ser compatível, mas não encontrei nada sobre isso em lugar nenhum.
Estou pensando que deve haver alguns utilitários C padrão para obter os detalhes da codificação de caracteres atual (senão como alguém poderia usá-la?), mas não consegui encontrar nada do tipo na minha pesquisa na web. Existem as funções setlocale
and nl_langinfo
, a última das quais pode dar a você o nome da codificação de caracteres usada atualmente, mas isso não me ajuda a decodificá-la.
Ou eu deveria saber e implementar todas elas com antecedência?