UTL_FILE et le jeu de caractères
J'ai travaillé sur cette chose pendant des jours et il me rend fou.
J'ai un oracle de la procédure que l'écriture d'un fichier à l'aide de UTL_FILE
.
J'ai utilisé pour stocker mes valeurs en tant que NVARCHAR2 et écrire mon fichier à l'aide de UTL_FILE.PUT_LINE_NCHAR
procédure, et il a écrit de fichier (ce que notepad++ considérer comme) UTF8.
Le fichier est ensuite utilisé par un autre programme, le problème, c'est que ledit programme de lecture à l'aide de WE8MSWIN1252, et je ne peux pas changer les choses, puisque c'est le code de legs.
J'ai donc essayé d'utiliser UTL_FILE.PUT_LINE
procédure à la place, mais le fichier était encore considéré comme de l'utf-8.
J'ai vu dans d'oracle documentation NVARCHAR2
utilisé le jeu de caractères nationaux (le mien est al16utf16, respectivement), alors j'ai essayé d'utiliser le CONVERT
méthode comme ceci:
CONVERT(whatIWantToWrite, 'WE8MSWIN1252', 'AL16UTF16'))
et il a soulevé la ORA-29298 jeu de Caractères Exception d'incompatibilité.
Je ne comprends pas, mon NLS_NCHAR_CHARACTERSET
est al16utf16, respectivement pourquoi je ne peux pas le convertir en WE8MSWIN1252 ?
Est-il une autre façon d'écrire un fichier à l'aide de WE8MSWIN1252 ?
put_line_nchar
à put_line
, avez-vous aussi changer de fopen_nchar
à open
? Est whatIWantToWrite
votre nvarchar2
colonne ou un PL/SQL variable, et si le dernier de ce type de données est-il?Vous l'aurez deviné. J'ai oublié de remplacer
fopen_nchar
avec fopen
. Ne peux pas croire que j'ai passé autant de temps sur ce. De toute façon, je vous Remercie beaucoup.OriginalL'auteur DeadlyJesus | 2014-02-26
Vous devez vous connecter pour publier un commentaire.
Cela semble être parce que vous êtes encore de l'ouverture du fichier avec
fopen_nchar
. Si je fais ceci:... puis-je obtenir un fichier contenant
䡥汬
, qui l'Linuxfile
de commande, rapports deUTF-8 Unicode text
; Notepad++ montre䡥汬
et dit que le fichier est "ANSI que de l'UTF-8'.Si je change le
fopen
àfopen_nchar
:... puis-je obtenir
ORA-29298: Character set mismatch
et un fichier vide.Si je retourne à
fopen
mais le changement le PL/SQL variablevarchar2
:... puis le fichier contient
¿¿
(envim
) et le fichier est signalé commeISO-8859 text
. Mais Notepad++ montre߿
et dit que le fichier est ANSI.Plutôt que d'utiliser
convert
, Oracle décourage, vous pouvez rebondir à travers raw:Dans Linux qui montre que
Hello
et le fichier est signalé commeASCII text
; Notepad++ indique qu'ilHello
ainsi, et, de nouveau, dit que le fichier est ANSI. Je suis pas clair si cela vous mène là où vous devez être... et vous pourriez avoir besoin d'une autre langue et les paramètres régionaux, bien sûr.Mais ma base de données utilise le jeu de caractères AL32UTF8, et mon jeu de caractères nationaux est al16utf16, respectivement, de sorte que vous pourriez voir des comportements différents; si votre base de données utilise le jeu de caractères WE8MSWIN1252 alors le fichier sera créé que des la documentation:
OriginalL'auteur Alex Poole
C'est peut-être une option pour vous convertir le fichier par la suite, il a été écrit sur le disque, par exemple avec Java outil Native-à-ASCII Convertisseur.
OriginalL'auteur Wernfried Domscheit
Vous pouvez utiliser
dbms_xslprocessor.clob2file
.Al16utf16, respectivement(csid)=2000 WE8MSWIN1252(csid)=178
Pour obtenir
CSID
:OriginalL'auteur Sylwek