OVH Cloud OVH Cloud

conversion japonais Unicode

18 réponses
Avatar
Elderion
pour une application C# Pocket PC a traduire en japonais je développe un
site intranet ASP.Net , et il faut que je fasse la chose suivante (mon post
précendant est erroné) :

le traducteur va traduire les messages francais de l'appli en japonais.
il va donc ecrire des ideogrammes dans des textBox

- il faut que je puisse convertir tous les ideogrammes en leur equivalence
unicode (quelque chose comme "#<code>") pour inserer les messages tout en
unicodes dans une base SQL

- il faut que lors du remplissage d'une textBox (depuis base SQL) de mon
appli, la page interprete le code unicode, de telle sorte a voir apparaitre
un ideogramme dans la textBox et non pas "#<code>"

une classe existe telle dans le Framework .Net pour faire ca ?

8 réponses

1 2
Avatar
Elderion
Super merci

Ya equivalence de cette fonction en VB.net ?
je voudrais faire une fonction qui retourne l'entier de chaque ideogramme de
mon message


"Zim" <"r[omuald].szymanskiANTI"@SPAM.laposte.net> a écrit dans le message
de news: %
Elderion a écrit :
merci excellant
avec le N ca marche super

cependant connaissez vouss une fonction SQL qui permette dans l'INSERT
d'enregistrer non pas l'ideogramme mais le code unicode associé

genre:
INSERT INTO MATABLE VALUES
('testunicode', 'french', convertir_en_unicode (N'?'),
'04/04/2005','04/05/2005')

comme ca dans mon champs il n'y aurait pas ? mais le code unicode
correspondant

ca me sera utile plus tard.


"Zim" <"r[omuald].szymanskiANTI"@SPAM.laposte.net> a écrit dans le
message de news: %

D'autre part, si vous faites des insertions manuellement, n'oubliez pas
le préfixe Unicode N avant toute chaine de caractères :

INSERT maTable VALUES(N'ideogrammes');








Effectivement, il existe une fonction T-SQL qui s'appelle ... Unicode()
SELECT Unicode(N'ideogramme') renvoie un entier correspondant au code.


Avatar
Elderion
merci pour ces précisions
ok donc en fait la base SQL stocke toujours la valeur unicode
et me montre, via Entreprise manager ou page web, l'apparence de
l'ideogramme en utilisant la police par defaut associée celui ci, que
connait SQL Server

Donc si je vois que des ???? c'est donc que d'une maniere ou d'une autre SQL
Server ne trouve pas de fonte permettant d'afficher le code unicode.

en mettant des 'N' dans ma requete ca marche nickel. si je met pas de N ca
signifie qu'il enregistre une valeur brute correspondante a mon ideogramme,
valeu qui ne correspond a pas a la table Unicode, et donc pour me la montrer
il trouve pas la fonte qui convient.

c ca ?


a écrit dans le message de news:


Elderion wrote:
merci excellant
avec le N ca marche super

cependant connaissez vouss une fonction SQL qui permette dans l'INSERT
d'enregistrer non pas l'ideogramme mais le code unicode associé



Mais *c'est* le code associé qui est enregistré! En interne,
n'importe quelle chaîne (Unicode ou non) est toujours stockée comme
une suite de valeurs numériques ("code points" dans la charabia
Unicode). Tu ne t'imagines quand même pas que ta base de données
stocke une copie de la bitmap de chaque idéogramme!

L'idéogramme, il n'est utilisé que pour le rendu à l'écran du
charactère, et comme on te l'a déjà dit, çà c'est une question de
police de caractères, c'est tout!
Si tu vois des "???", c'est que tu essaies d'afficher des idéogrammes
avec une police qui n'a pas les images correspondantes à ces code
points (où alors que tu te plantes sur l'encoding des caractères,
mais c'est peu probable si tu ne travailles que sous Windows - dans ce
càs l'encoding sera toujours UCS2).

Arnaud
MVP - VC
Avatar
Elderion
ce qu'il me faudrait ca serait une fonction similaire
qui puisse traduire un message entier (messages d'ideos -> entier | message
d'entiers -> ideos)

Si ca existe pas, avoir l'equivalent de ces 2 fonctions T-SQL en ASP.net
pour les integrer a une boucle utilisant substring().

Merci


"Zim" <"r[omuald].szymanskiANTI"@SPAM.laposte.net> a écrit dans le message
de news:
Décidemment, je ne sais pas tout mettre en un seul mail.
La fonction inverse est NChar(code) où code est l'entier correpondant à
l'idéogramme.


Avatar
adebaene
Elderion wrote:
merci pour ces précisions
ok donc en fait la base SQL stocke toujours la valeur unicode
et me montre, via Entreprise manager ou page web, l'apparence de
l'ideogramme en utilisant la police par defaut associée celui ci, que
connait SQL Server



Ce n'est pas lié à SQL Server, plutôt à Enterprise Manager (où le
client que tu veux bien utiliser pour l'affichage).
Je n'ai pas de base avec des données Unicode sous la main pour tester,
mais Option -> Police dans Enterprise Manager permet peut-être de
régler le problème.

Donc si je vois que des ???? c'est donc que d'une maniere ou d'une autre SQL
Server ne trouve pas de fonte permettant d'afficher le code unicode.


Le *client* ne trouve pas de font. SQL Server lui-même ne s'occupe pas
d'affichage.


en mettant des 'N' dans ma requete ca marche nickel. si je met pas de N ca
signifie qu'il enregistre une valeur brute correspondante a mon ideogramm e,
valeu qui ne correspond a pas a la table Unicode, et donc pour me la mont rer
il trouve pas la fonte qui convient.

c ca ?


Non : Si tu ne mets pas de N, la chaîne est enregistrée dans la base
en ANSI, c'est à dire avec 8 bits par caractères, ce qui n'autorise
à stocker que les caractères définis dans ton "codeset"
(probablement 1252 "Latin 1"), ce qui exclut le japonais d'office. Il
faut bien voir qu'une chaine stockée sur 8 bits par un système avec
un codeset donné et relue par un système avec un autre codeset ne va
pas être relue correctement.

C'est tout l'intérêt d'Unicode, de définir un standard de
représentation numérique des différents caractères ("code points").
Ce qu'Unicode ne définit pas, c'est comment ces valeurs numériques
sont stockées en binaire, d'où les différents encoding UTF8, UCS2,
etc...

Quand tu préfixes tes chaines avec N, SQL Server stocke les chaines
sur 2 octets par caractères, en UCS2 (l'encoding standard de Windows).

Pour une excellente introduction sur le sujet (le minimum à savoir si
tu veux faire une appli internationale AMHA), voire
http://www.joelonsoftware.com/articles/Unicode.html

Arnaud
MVP - VC
Avatar
Zim
> ce qu'il me faudrait ca serait une fonction similaire
qui puisse traduire un message entier (messages d'ideos -> entier | message
d'entiers -> ideos)

Si ca existe pas, avoir l'equivalent de ces 2 fonctions T-SQL en ASP.net
pour les integrer a une boucle utilisant substring().

Merci




Vous avez tout dit ...
Il suffit de boucler sur chaque caractère de votre message (avec
Substring) et de transformer.
Avatar
Zim
Elderion a écrit :
Super merci

Ya equivalence de cette fonction en VB.net ?
je voudrais faire une fonction qui retourne l'entier de chaque ideogramme de
mon message




Il n'y pas d'équivalent "direct" en .NET.
Pour obtenir ce chiffre, il faut récupérer un tableau de bytes à partir
de votre chaine de caractères (cf. les fonctions d'encodage).
Utilisez l'encodage BigEndianUnicode qui code chaque caractère sur deux
octets.
Afin d'obtenir la valeur de chaque caractère, il suffit de lire le
tableau de bytes 2 octets par 2 octets et d'en faire l'addition (en
n'oubliant pas de multiplier l'octet de poids fort).

A vous de jouer !
Avatar
Elderion
oui mais la boucle il faut que je la fasse en VB.net
c a cet effet qu'il me faudrait l'equivalent des fonctions SQL NChar() et
Unicode() --> en VB.net

vous les connaissez ?


"Zim" <"r[omuald].szymanskiANTI"@SPAM.laposte.net> a écrit dans le message
de news: %
ce qu'il me faudrait ca serait une fonction similaire
qui puisse traduire un message entier (messages d'ideos -> entier |
message d'entiers -> ideos)

Si ca existe pas, avoir l'equivalent de ces 2 fonctions T-SQL en ASP.net
pour les integrer a une boucle utilisant substring().

Merci




Vous avez tout dit ...
Il suffit de boucler sur chaque caractère de votre message (avec
Substring) et de transformer.


Avatar
Ambassadeur Kosh
regarder du côté de la class Encoding dans System.Text
1 2