Как использовать unicode в C [duplicate]

В веб-приложении каждая задача выполняется в виде запроса и ответа.

Программирование на стороне клиента - это HTML-код с Java-скриптом и его фреймворками, библиотеки выполняются в Internet Explorer, Mozilla, Chrome-браузерах. В сценарии Java-сценария серверные сервлеты программирования выполняются в Tomcat, web-логике, j боссе, WebSphere severs

76
задан Jonathan Leffler 9 February 2009 в 06:53
поделиться

8 ответов

20
ответ дан Hans van Eck 26 August 2018 в 00:26
поделиться
  • 1
    Действительная последовательность байтов UTF-8 никогда не будет обрезана (усечена) strncpy. Действительные последовательности UTF-8 могут не содержать 0x00 байт (за исключением конечного нулевого байта, конечно). – Dan Moulding 9 August 2010 в 18:16
  • 2
    @Dan Molding: если вы strncpy (), скажем, строку, содержащую один китайский символ (который может быть 3 байта), в массив из 2 байтовых символов, вы создаете недопустимую последовательность UTF-8. – Hans van Eck 15 August 2010 в 20:50
  • 3
    +1: Мне тоже нравится UTF-8. Упаковщики ftw! – rubenvb 18 August 2010 в 15:05
  • 4
    @Hans van Eck: Если ваша обертка копирует этот единственный 3-байтовый китайский символ в 2-байтовый массив, то вы либо собираетесь усечь его, либо создать недопустимую последовательность, либо у вас будет неопределенное поведение. Очевидно, что если вы копируете данные, цель должна быть достаточно большой; само собой разумеется. Я считаю, что strncpy, который используется правильно, совершенно безопасен для использования с UTF-8. – Dan Moulding 4 November 2011 в 15:17
  • 5
    @DanMoulding: если вы знаете , что ваш целевой буфер достаточно велик, вы можете просто использовать strcpy (который действительно безопасен для использования с UTF-8). Люди, использующие strncpy, вероятно, это делают, потому что они не знают , достаточно ли целевого буфера, поэтому они хотят передать максимальное количество байтов для копирования - что действительно может создать недопустимый UTF-8 последовательности. – Frerich Raabe 8 February 2013 в 01:48
7
ответ дан approxiblue 26 August 2018 в 00:26
поделиться
  • 1
    wint_t - это тип, определенный в & lt; wchar.h & gt ;, как и wchar_t. Он имеет ту же роль в отношении широких символов, которые int имеет в отношении «char»; он может содержать любое широкое значение символа или WEOF. – Jonathan Leffler 9 February 2009 в 08:02
3
ответ дан Community 26 August 2018 в 00:26
поделиться
10
ответ дан Gaurang Tandon 26 August 2018 в 00:26
поделиться
  • 1
    Обратите внимание, что stdio f* и друзья работают с char * на каждой платформе , потому что стандарт говорит так: используйте вместо wcs* для wchar_t. – cat 7 December 2016 в 22:23
36
ответ дан Jonathan Leffler 26 August 2018 в 00:26
поделиться
2
ответ дан Mike Weller 26 August 2018 в 00:26
поделиться
1
ответ дан PolyThinker 26 August 2018 в 00:26
поделиться
2
ответ дан user 26 August 2018 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: