Question

lors du portage de mon projet Visual C ++ GCC, j'ai découvert que le type de données wchar_t est UTF-32 par défaut de 4 octets. Je pourrais passer outre que avec une option de compilateur, mais l'ensemble WCS * (wcslen, wcscmp, etc.) une partie de RTL est rendue inutilisable, car elle suppose des chaînes larges de 4 octets.

Pour l'instant, je l'ai réimplémentée 5-6 de ces fonctions à partir de zéro et #defined mes mises en œuvre dans Mais est-il une option plus élégante -. Par exemple, une version de GCC RTL avec wchar-t 2 octets tranquillement assis quelque part , en attendant d'être liés?

Les arômes spécifiques du CCG je suis après sont Xcode sous Mac OS X, Cygwin, et celui qui est livré avec Debian Linux Etch.

Était-ce utile?

La solution 4

Réimplémentée 5-6 de WCS plus communs * fonctions, #defined mes mises en œuvre dans.

Autres conseils

  

Mais est-il une option plus élégante - disons, une version de GCC RTL avec wchar-t 2 octets tranquillement assis quelque part, en attente d'être lié

Non

. Ceci est un problème spécifique à la plate-forme, pas un problème de GCC.

C'est-à-dire la plate-forme Linux ABI précise que wchar_t est une largeur de 32 bits, donc soit vous devez utiliser une nouvelle bibliothèque entière (pour laquelle ICU est un choix populaire), ou le port de votre code pour gérer 4 octets wchar_ts. Toutes les bibliothèques que vous pouvez créer un lien vers assumera également un wchar_t 4 octets, et pause si vous utilisez la -fshort-wchar de GCC.

Mais sur Linux en particulier, presque tout le monde a standardisé UTF-8 pour tous les encodages multi-octets.

Regardez le ICU bibliothèque . Il est une bibliothèque portable avec une API UTF-16.

Comme vous l'avez remarqué, wchar_t est défini par l'implémentation. Il n'y a aucun moyen de travail portable avec ce type de données.

systèmes Linux en général avait l'avantage d'obtenir le soutien Unicode plus tard, après l'ensemble UCS-2 a été déclaré débacle idée pas si grande, et UTF-8 utilisé comme l'encodage. Toutes les API du système fonctionnent toujours char *, et sont en sécurité Unicode.

Vos meilleurs paris sont à utiliser une bibliothèque qui gère pour vous. Qt, soins intensifs, etc

Notez que Cygwin dispose d'un wchar_t 2 octets pour rendre plus facile engrener avec Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top