Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Replace et exactitude

22 réponses
Avatar
Hervé REIGNOUX
Bonjour,
Je tombe sur un os : des données venues d'un système tiers ont entraîné une
accentuation fantaisiste.
Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
intégré.
Voici un exemple de ce que je veux faire sans y parvenir :
------------------------------------------------
set NoCount ON
create table #toto (champ1 varchar(10))
insert #toto values ('Franþois')
insert #toto values ('FrÞres')

select
champ1,
cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
cast('ç' as binary(1))) as varchar(10)) as test3,
cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
cast('è' as binary(1))) as varchar(10)) as test4
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
On obtient :
------------------------------------------------
champ1 test1 test2 test3 test4
---------- ---------- ---------- ---------- ----------
Franþois François Franèois François Franèois
FrÞres Frçres Frères Frçres Frères

Þ þ
---- ----
0xDE 0xFE
------------------------------------------------
J'espère que les caractères bizarres vont bien passer sur le newsgroup !
Si tel est le cas, vous aurez compris que je veux modifier "Franþois" en
"François", et pas autre chose.
Quelqu'un peut-il m'aider ?

10 réponses

1 2 3
Avatar
Philippe TROTIN [MS]
C'est un bête problème de collation :

<<
CREATE TABLE #toto ( champ1 nvarchar(10) COLLATE Latin1_General_CS_AS)

insert #toto values (N'Franþois')
insert #toto values (N'FrÞres')

UPDATE #toto SET champ1 = cast(replace(champ1, 'Þ', 'è') as nvarchar(10))
UPDATE #toto SET champ1 = cast(replace(champ1, 'þ', 'ç') as nvarchar(10))

SELECT * FROM #toto

DROP TABLE #toto







Les caractères Þ et þ sont les mêmes sauf que l'un est en majuscule et
l'autre en minuscule !!! :-(

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Hervé REIGNOUX" a écrit dans le message de
groupe de discussion : 46e95c36$0$7349$
Bonjour,
Je tombe sur un os : des données venues d'un système tiers ont entraîné
une accentuation fantaisiste.
Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
intégré.
Voici un exemple de ce que je veux faire sans y parvenir :
------------------------------------------------
set NoCount ON
create table #toto (champ1 varchar(10))
insert #toto values ('Franþois')
insert #toto values ('FrÞres')

select
champ1,
cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
cast('ç' as binary(1))) as varchar(10)) as test3,
cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
cast('è' as binary(1))) as varchar(10)) as test4
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
On obtient :
------------------------------------------------
champ1 test1 test2 test3 test4
---------- ---------- ---------- ---------- ----------
Franþois François Franèois François Franèois
FrÞres Frçres Frères Frçres Frères

Þ þ
---- ----
0xDE 0xFE
------------------------------------------------
J'espère que les caractères bizarres vont bien passer sur le newsgroup !
Si tel est le cas, vous aurez compris que je veux modifier "Franþois" en
"François", et pas autre chose.
Quelqu'un peut-il m'aider ?



Avatar
Sylvain Lafontaine
Selon le programme client utilisé, il serait également de prendre la peine
de mettre le préfixe N' devant les constantes 'Þ', 'è', ... :

UPDATE #toto SET champ1 = cast(replace(champ1, N'Þ', N'è') as nvarchar(10))

Comme dans tous les cas, oublier l'ANSI et utiliser exclusivement l'Unicode
serait probablement la meilleure chose à faire; sinon on risque d'avoir une
cible mouvante.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Philippe TROTIN [MS]" wrote in message
news:
C'est un bête problème de collation :

<<
CREATE TABLE #toto ( champ1 nvarchar(10) COLLATE Latin1_General_CS_AS)

insert #toto values (N'Franþois')
insert #toto values (N'FrÞres')

UPDATE #toto SET champ1 = cast(replace(champ1, 'Þ', 'è') as nvarchar(10))
UPDATE #toto SET champ1 = cast(replace(champ1, 'þ', 'ç') as nvarchar(10))

SELECT * FROM #toto

DROP TABLE #toto







Les caractères Þ et þ sont les mêmes sauf que l'un est en majuscule et
l'autre en minuscule !!! :-(

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Hervé REIGNOUX" a écrit dans le message de
groupe de discussion : 46e95c36$0$7349$
Bonjour,
Je tombe sur un os : des données venues d'un système tiers ont entraîné
une accentuation fantaisiste.
Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
intégré.
Voici un exemple de ce que je veux faire sans y parvenir :
------------------------------------------------
set NoCount ON
create table #toto (champ1 varchar(10))
insert #toto values ('Franþois')
insert #toto values ('FrÞres')

select
champ1,
cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
cast('ç' as binary(1))) as varchar(10)) as test3,
cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
cast('è' as binary(1))) as varchar(10)) as test4
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
On obtient :
------------------------------------------------
champ1 test1 test2 test3 test4
---------- ---------- ---------- ---------- ----------
Franþois François Franèois François Franèois
FrÞres Frçres Frères Frçres Frères

Þ þ
---- ----
0xDE 0xFE
------------------------------------------------
J'espère que les caractères bizarres vont bien passer sur le newsgroup !
Si tel est le cas, vous aurez compris que je veux modifier "Franþois" en
"François", et pas autre chose.
Quelqu'un peut-il m'aider ?





Avatar
Hervé REIGNOUX
Merci pour ta réponse.
La table exemple que je donnais cache bien sûr une toute autre réalité : le
problème se pose sur une table en production de 16 millions de lignes, la
colonne en question est en COLLATE French_CI_AS et n'est pas en Unicode.
C'est comme ça et ça ne changera pas !
Je ne suis pas très au fait de ces problèmes de collation. Le script suivant
:
------------------------------------------------
create table #toto (champ1 varchar(10) COLLATE French_CI_AS)
insert #toto values ('Franþois')
insert #toto values ('FrÞres')
insert #toto values ('Françoise')
insert #toto values ('þ-ç Þ-è')

select
champ1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç') as varchar(10))
as replace1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è') as varchar(10))
as replace2,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç'), 'Þ',
'è') as varchar(10)) as replace_tout1,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è'), 'þ',
'ç') as varchar(10)) as replace_tout2
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
semble déboucher sur ce que je veux (colonne replace_tout1).
Qu'en penses-tu ?

"Philippe TROTIN [MS]" a écrit dans le
message de news:
C'est un bête problème de collation :


Avatar
Philippe TROTIN [MS]
Cela me parait très bien.

Effectivement le but n'est pas de changer la collation au niveau de la table
mais bien de le faire au niveau de la requête.

Sylvain a par contre entièrement raison. Il faut aussi mettre N devant les
constantes (comme indiqué dans le précédent post).

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Hervé REIGNOUX" a écrit dans le message de
groupe de discussion : 46ea5642$0$13873$
Merci pour ta réponse.
La table exemple que je donnais cache bien sûr une toute autre réalité :
le problème se pose sur une table en production de 16 millions de lignes,
la colonne en question est en COLLATE French_CI_AS et n'est pas en
Unicode.
C'est comme ça et ça ne changera pas !
Je ne suis pas très au fait de ces problèmes de collation. Le script
suivant :
------------------------------------------------
create table #toto (champ1 varchar(10) COLLATE French_CI_AS)
insert #toto values ('Franþois')
insert #toto values ('FrÞres')
insert #toto values ('Françoise')
insert #toto values ('þ-ç Þ-è')

select
champ1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç') as
varchar(10)) as replace1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è') as
varchar(10)) as replace2,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç'), 'Þ',
'è') as varchar(10)) as replace_tout1,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è'), 'þ',
'ç') as varchar(10)) as replace_tout2
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
semble déboucher sur ce que je veux (colonne replace_tout1).
Qu'en penses-tu ?

"Philippe TROTIN [MS]" a écrit dans le
message de news:
C'est un bête problème de collation :






Avatar
Sylvain Lafontaine
Personnellement, je ne suis plus très sûr de la nécessité d'utiliser N' ici
car on travaille uniquement en ANSI. Si c'est le caractère 'þ' qu'il voit
localement sur sa machine, alors le bon code devrait être retourné. Comme
on dit: une erreur à l'arrivé, une erreur au retour; les deux se corrigent
et tout est beau.

En lieu et place des constantes, il faudrait peut-être utiliser les
fonctions Ascii, Unicode, Char et nChar afin d'éviter tout problème de
codification.

De plus, dans ce cas-ci, regarder pourquoi les données sont mal importées en
premier ne serait pas une mauvaise idée.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Philippe TROTIN [MS]" wrote in message
news:
Cela me parait très bien.

Effectivement le but n'est pas de changer la collation au niveau de la
table mais bien de le faire au niveau de la requête.

Sylvain a par contre entièrement raison. Il faut aussi mettre N devant les
constantes (comme indiqué dans le précédent post).

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Hervé REIGNOUX" a écrit dans le message de
groupe de discussion : 46ea5642$0$13873$
Merci pour ta réponse.
La table exemple que je donnais cache bien sûr une toute autre réalité :
le problème se pose sur une table en production de 16 millions de lignes,
la colonne en question est en COLLATE French_CI_AS et n'est pas en
Unicode.
C'est comme ça et ça ne changera pas !
Je ne suis pas très au fait de ces problèmes de collation. Le script
suivant :
------------------------------------------------
create table #toto (champ1 varchar(10) COLLATE French_CI_AS)
insert #toto values ('Franþois')
insert #toto values ('FrÞres')
insert #toto values ('Françoise')
insert #toto values ('þ-ç Þ-è')

select
champ1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç') as
varchar(10)) as replace1,
cast(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è') as
varchar(10)) as replace2,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'þ', 'ç'), 'Þ',
'è') as varchar(10)) as replace_tout1,
cast(replace(replace(champ1 COLLATE Latin1_General_CS_AS, 'Þ', 'è'), 'þ',
'ç') as varchar(10)) as replace_tout2
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
semble déboucher sur ce que je veux (colonne replace_tout1).
Qu'en penses-tu ?

"Philippe TROTIN [MS]" a écrit dans le
message de news:
C'est un bête problème de collation :








Avatar
Fred BROUARD
CREATE FUNCTION F_SUBSTITUTE (@IN VARCHAR(8000),
@OLD VARCHAR(256),
@NEW VARCHAR(256))
RETURNS VARCHAR(8000)
AS
BEGIN
IF @IN IS NULL RETURN NULL;
IF @OLD IS NULL OR @OLD = ''
OR @NEW IS NULL OR @NEW = '' RETURN @IN;

DECLARE @I INT, @L INT;
DECLARE @OUT VARCHAR(8000);
DECLARE @C VARCHAR(1);
DECLARE @POS INT;
SET @I = 1;
SET @L = LEN(@IN);
SET @OUT = '';

WHILE @I <= @L
BEGIN

SET @C = SUBSTRING(@IN, @I, 1);
SET @POS = CHARINDEX(@C COLLATE French_CS_AS,
@OLD COLLATE French_CS_AS);
IF @POS > 0
IF LEN(@OUT) < @POS
SET @C = '';
ELSE
SET @C = SUBSTRING(@NEW, @POS, 1);
SET @OUT = @OUT + @C;
SET @I = @I + 1;
END

RETURN @OUT;

END
GO

select champ1, dbo.F_SUBSTITUTE(champ1, 'þÞ', 'çè') AS NEW_CHHAMP1
from #toto


champ1 NEW_CHHAMP1
---------- --------------------
Franþois François
FrÞres Frères

A +



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Hervé REIGNOUX a écrit :
Bonjour,
Je tombe sur un os : des données venues d'un système tiers ont entraîné une
accentuation fantaisiste.
Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
intégré.
Voici un exemple de ce que je veux faire sans y parvenir :
------------------------------------------------
set NoCount ON
create table #toto (champ1 varchar(10))
insert #toto values ('Franþois')
insert #toto values ('FrÞres')

select
champ1,
cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
cast('ç' as binary(1))) as varchar(10)) as test3,
cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
cast('è' as binary(1))) as varchar(10)) as test4
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
On obtient :
------------------------------------------------
champ1 test1 test2 test3 test4
---------- ---------- ---------- ---------- ----------
Franþois François Franèois François Franèois
FrÞres Frçres Frères Frçres Frères

Þ þ
---- ----
0xDE 0xFE
------------------------------------------------
J'espère que les caractères bizarres vont bien passer sur le newsgroup !
Si tel est le cas, vous aurez compris que je veux modifier "Franþois" en
"François", et pas autre chose.
Quelqu'un peut-il m'aider ?




Avatar
Philippe TROTIN [MS]
Bonjour,

Fred, j'ai un peu peur que l'utilisation de cette fonction sur un volume de
données conséquent soit un peu couteux :-(

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Fred BROUARD" a écrit dans le message de groupe
de discussion :
CREATE FUNCTION F_SUBSTITUTE (@IN VARCHAR(8000),
@OLD VARCHAR(256),
@NEW VARCHAR(256))
RETURNS VARCHAR(8000)
AS
BEGIN
IF @IN IS NULL RETURN NULL;
IF @OLD IS NULL OR @OLD = ''
OR @NEW IS NULL OR @NEW = '' RETURN @IN;

DECLARE @I INT, @L INT;
DECLARE @OUT VARCHAR(8000);
DECLARE @C VARCHAR(1);
DECLARE @POS INT;
SET @I = 1;
SET @L = LEN(@IN);
SET @OUT = '';

WHILE @I <= @L
BEGIN

SET @C = SUBSTRING(@IN, @I, 1);
SET @POS = CHARINDEX(@C COLLATE French_CS_AS,
@OLD COLLATE French_CS_AS);
IF @POS > 0
IF LEN(@OUT) < @POS
SET @C = '';
ELSE
SET @C = SUBSTRING(@NEW, @POS, 1);
SET @OUT = @OUT + @C;
SET @I = @I + 1;
END

RETURN @OUT;

END
GO

select champ1, dbo.F_SUBSTITUTE(champ1, 'þÞ', 'çè') AS NEW_CHHAMP1
from #toto


champ1 NEW_CHHAMP1
---------- --------------------
Franþois François
FrÞres Frères

A +



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Hervé REIGNOUX a écrit :
Bonjour,
Je tombe sur un os : des données venues d'un système tiers ont entraîné
une accentuation fantaisiste.
Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
intégré.
Voici un exemple de ce que je veux faire sans y parvenir :
------------------------------------------------
set NoCount ON
create table #toto (champ1 varchar(10))
insert #toto values ('Franþois')
insert #toto values ('FrÞres')

select
champ1,
cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
cast('ç' as binary(1))) as varchar(10)) as test3,
cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
cast('è' as binary(1))) as varchar(10)) as test4
from #toto
select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

drop table #toto
------------------------------------------------
On obtient :
------------------------------------------------
champ1 test1 test2 test3 test4
---------- ---------- ---------- ---------- ----------
Franþois François Franèois François Franèois
FrÞres Frçres Frères Frçres Frères

Þ þ
---- ----
0xDE 0xFE
------------------------------------------------
J'espère que les caractères bizarres vont bien passer sur le newsgroup !
Si tel est le cas, vous aurez compris que je veux modifier "Franþois" en
"François", et pas autre chose.
Quelqu'un peut-il m'aider ?





Avatar
SQLpro
Mon cher Philippe, je suis entièrement d'accord !
Mais dans la vie il faut savoir ce que l'on veut....
On ne peut pas à la fois exiger le confort d'une limousine et vouloir
rouler à la vitesse d'une formule 1

;-)

A +




On 18 sep, 10:42, "Philippe TROTIN [MS]"
wrote:
Bonjour,

Fred, j'ai un peu peur que l'utilisation de cette fonction sur un volume de
données conséquent soit un peu couteux :-(

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Fred BROUARD" a écrit dans le message de g roupe
de discussion :



> CREATE FUNCTION F_SUBSTITUTE (@IN VARCHAR(8000),
> @OLD VARCHAR(256),
> @NEW VARCHAR(256))
> RETURNS VARCHAR(8000)
> AS
> BEGIN
> IF @IN IS NULL RETURN NULL;
> IF @OLD IS NULL OR @OLD = ''
> OR @NEW IS NULL OR @NEW = '' RETURN @IN;

> DECLARE @I INT, @L INT;
> DECLARE @OUT VARCHAR(8000);
> DECLARE @C VARCHAR(1);
> DECLARE @POS INT;
> SET @I = 1;
> SET @L = LEN(@IN);
> SET @OUT = '';

> WHILE @I <= @L
> BEGIN

> SET @C = SUBSTRING(@IN, @I, 1);
> SET @POS = CHARINDEX(@C COLLATE French_CS_AS,
> @OLD COLLATE French_CS_AS);
> IF @POS > 0
> IF LEN(@OUT) < @POS
> SET @C = '';
> ELSE
> SET @C = SUBSTRING(@NEW, @POS, 1);
> SET @OUT = @OUT + @C;
> SET @I = @I + 1;
> END

> RETURN @OUT;

> END
> GO

> select champ1, dbo.F_SUBSTITUTE(champ1, 'þÞ', 'çè') AS NEW_CHHA MP1
> from #toto

> champ1 NEW_CHHAMP1
> ---------- --------------------
> Franþois François
> FrÞres Frères

> A +

> --
> Frédéric BROUARD, MVP SQL Server, expert bases de données et lang age SQL
> Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
> Audit, conseil, expertise, formation, modélisation, tuning, optimisat ion
> *********************http://www.datasapiens.com***********************

> Hervé REIGNOUX a écrit :
>> Bonjour,
>> Je tombe sur un os : des données venues d'un système tiers ont ent raîné
>> une accentuation fantaisiste.
>> Ce problème est résolu mais je voudrais faire du ménage dans ce qui a été
>> intégré.
>> Voici un exemple de ce que je veux faire sans y parvenir :
>> ------------------------------------------------
>> set NoCount ON
>> create table #toto (champ1 varchar(10))
>> insert #toto values ('Franþois')
>> insert #toto values ('FrÞres')

>> select
>> champ1,
>> cast(replace(champ1, 'þ', 'ç') as varchar(10)) as test1,
>> cast(replace(champ1, 'Þ', 'è') as varchar(10)) as test2,
>> cast(replace(cast(champ1 as varbinary(10)), cast('þ' as binary(1)),
>> cast('ç' as binary(1))) as varchar(10)) as test3,
>> cast(replace(cast(champ1 as varbinary(10)), cast('Þ' as binary(1)),
>> cast('è' as binary(1))) as varchar(10)) as test4
>> from #toto
>> select cast('Þ' as binary(1)) as 'Þ', cast('þ' as binary(1)) as 'þ'

>> drop table #toto
>> ------------------------------------------------
>> On obtient :
>> ------------------------------------------------
>> champ1 test1 test2 test3 test4
>> ---------- ---------- ---------- ---------- ----------
>> Franþois François Franèois François Franèois
>> FrÞres Frçres Frères Frçres Frères

>> Þ þ
>> ---- ----
>> 0xDE 0xFE
>> ------------------------------------------------
>> J'espère que les caractères bizarres vont bien passer sur le newsg roup !
>> Si tel est le cas, vous aurez compris que je veux modifier "Franþois " en
>> "François", et pas autre chose.
>> Quelqu'un peut-il m'aider ?- Masquer le texte des messages précéde nts -

- Afficher le texte des messages précédents -


Avatar
Pierre Goiffon
Hervé REIGNOUX wrote:
Je tombe sur un os : des données venues d'un système tiers ont entraîné une
accentuation fantaisiste.



Comment ont été importées les données ? Quel était le codage source,
quel est le codage cible ?
Une fois que vous aurez ces informations il sera très simple de comparer
les 2 jeux de caractères (en espérant qu'il n'y ait eu qu'un seul
transcodage...) et de tout remettre en ordre.

Puisque vous dites que les prb sont rencontrés "sur les lettres
accentuées", il est probable que les 2 codages soient des 8 bits basés
sur us-ascii, et d'après ce que vous indiquez il ne s'agit pas d'un
classique transcodage entre CP-850 et ISO Latin-1 ou Windows-1252
(excellent outil pour s'en rendre compte :
http://www.miakinen.net/vrac/charsets/)

Je m'inscrit à nouveau en profond désaccord avec Sylvain Lafontaine
(dont les propos qu'il répète à nouveau ici me paraissent extrêmement
dangereux) : plutôt que "de tout passer en Unicode" sans comprendre,
documentez vous, apprenez à gérer correctement les codages, et faites
alors vos choix en fonction des besoins.
Avatar
Sylvain Lafontaine
> Je m'inscrit à nouveau en profond désaccord avec Sylvain Lafontaine (dont
les propos qu'il répète à nouveau ici me paraissent extrêmement dangereux)
: plutôt que "de tout passer en Unicode" sans comprendre, documentez vous,
apprenez à gérer correctement les codages, et faites alors vos choix en
fonction des besoins.



« .. dont les propos ... paraissent extrêmement dangereux ... »

Extrêmement dangereux? Vous n'y allez pas un peu fort avec la chandelle?
On se prend pour qui, pour James Bond?

Ma recommendation personnelle est bel et bien de tout passer en Unicode sauf
dans certains cas particuliers où il y aurait une raison d'importance
contraire et contraignante (ie., manque évident de place sur le disque dur
avec *impossibilité* de corriger) et cette recommandation est basée sur des
années de pratique et de réflexion. Je suggère qu'à moins d'arriver avec
une bonne raison indiquant l'impossibilité ou la quasi-impossibilité
d'utiliser l'Unicode dans un cas particulier et que cette raison ait été
explorée à fond pour en déterminer la validité et l'impossibilité de s'y
soustraire autrement, l'Unicode devrait être toujours utilisé en lieu et
place de tout code ASCII.

Cependant, il s'agit là uniquement de ma recommendation personnelle et il
n'y a personne en ce bas monde qui soit obligé de s'y soumettre. La
décision finale revient à chacun et tout le monde est libre de choisir ce
qu'il veut; après avoir ou non alimenté sa réflexion sur les recommendations
fournies par toute autre personne de son choix.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Pierre Goiffon" wrote in message
news:46f6a03e$0$12042$
Hervé REIGNOUX wrote:
Je tombe sur un os : des données venues d'un système tiers ont entraîné
une accentuation fantaisiste.



Comment ont été importées les données ? Quel était le codage source, quel
est le codage cible ?
Une fois que vous aurez ces informations il sera très simple de comparer
les 2 jeux de caractères (en espérant qu'il n'y ait eu qu'un seul
transcodage...) et de tout remettre en ordre.

Puisque vous dites que les prb sont rencontrés "sur les lettres
accentuées", il est probable que les 2 codages soient des 8 bits basés sur
us-ascii, et d'après ce que vous indiquez il ne s'agit pas d'un classique
transcodage entre CP-850 et ISO Latin-1 ou Windows-1252 (excellent outil
pour s'en rendre compte : http://www.miakinen.net/vrac/charsets/)

Je m'inscrit à nouveau en profond désaccord avec Sylvain Lafontaine (dont
les propos qu'il répète à nouveau ici me paraissent extrêmement dangereux)
: plutôt que "de tout passer en Unicode" sans comprendre, documentez vous,
apprenez à gérer correctement les codages, et faites alors vos choix en
fonction des besoins.


1 2 3