2009-05-28 3 views
4

Что такое кодировка символов, ожидаемая в libc? Например, gethostname (char name, size_t namelen); принимает char как аргумент. Ожидается ли, что параметр имени будет закодирован в utf8 (который сохраняет неизменный ascii) или простой ascii или какой-либо другой формат?кодировка символов в libc?

Также имеет ли C мандат любую схему кодирования символов?

ответ

2

Все строковые функции (кроме широкоформатных) поддерживают только собственную кодировку, например. ASCII в Unix/Linux/Windows или EBCDIC на компьютерах мейнфрейма/среднего уровня IBM.

+0

Как использовать эти функции в среде без английского? – chappar

+0

Кроме того, я думаю, что libc не получил wchar_t * эквивалент всех функций char *. – chappar

+0

Вам нужно преобразовать себя или получить lib, чтобы выполнить эту работу - см. Здесь больше: http://stackoverflow.com/questions/313555/light-c-unicode-library. В любом случае, вы не можете назвать вас хозяином в UTF-8, не так ли? – qrdl

1
  • символ использует ASCII
  • wchar_t является стандартом C тип данных для Юникода

использования и для того, чтобы иметь дело с широкими символами.

+0

Что такое кодировка, используемая для wchar_t? Это UCS2 или utf16? – chappar

+0

@chappar: это реализация. –

+0

Реализация определена? Я думал, что это было определено приложением? (Два приложения, скомпилированные с одним и тем же компилятором на одной и той же ОС, имеют право использовать разные кодировки, что согласуется с «низким уровнем» C.) – bortzmeyer

0

char должно быть 7-разрядной совместимой кодировкой ASCII (я не могу найти какой-либо определенной ссылки на это, хотя). definition of wchar_t is left to the implementation, но стандарт C требует, чтобы символы из набора C portable character были одинаковыми. Если я это правильно понимаю, то

char a = 'a'; 
wchar_t aw = L'a'; 
if (a == (char)aw) { 
    // should be true 
} 

В стандарте ничего не говорится о UTF-8.

+0

ASCII не является обязательным, реализация может также использовать EBCDIC. –

0

Возможно, вам придется использовать стороннюю библиотеку, такую ​​как GLib. Эта библиотека является портативной и очень полезной, она также предоставляет регулярные выражения, структуры данных и многое другое.

+0

Почему downvote? –

+0

Возможно, потому что ответ не помог. Как бы помочь GLib в этом случае? – JesperE

+0

Я не знаю, почему кто-то отказался от этого. – chappar

Смежные вопросы