Problemas com Charset
03/07/2006
0
As minhas configuraçõs estão corretas com o formato europeu como podem ver abaixo.O oracle e o 10g
mt obrigado.
PARAMETER VALUE
---------------------------------------------------------------- -----------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET WE8MSWIN1252
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
---------------------------------------------------------------- -----------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected.
Rogeriorock
Posts
04/07/2006
Rosterne
nao sei o tipo de aquivo que sua aplicação está gerando. Sugiro que vc olhe o caracter set do seu sistema operacional e de sua aplicação.
Seu banco me parece que está rodando em cima do windows já que o CHARACTER SET é WE8MSWIN1252.
Sua aplicação pode esta rodando em linux com outro CHARACTER SET e caso tenha uma camada entre o servidor e a aplicação como um Aplication Server, pode acontecer do arquivo ser gerado com o valor do Aplication.
Atenção: Não se pode alterar o CHARACTER SET do banco sem fazer antes um export full e depois um import full ou um backup.
Pra Finaizar, caso estja genrando um arquivo de web, olhe o valor da variável ENCODE.
Espero ter ajudado.
04/07/2006
Rogeriorock
Eu estou usando vb.net pra criar um arquivo texto comum, do tipo notepad pra gerar os scripts, e a plataforma usa o padrão utf8, e ai que esta o problema pq, a plataforma pelo menos ate onde eu ainda sei, so trabalha com utf7,utf8 e encode. Por isto quando a gente le noonotepad o arquivo ele esta certo.mas quando o oracle interpleta não por interpletar de forma diferente.O cliente e Windows2000 tb, inclusive isto tb ocorre na minha maquina de desenvovimento onde eu sou o servidor.Estou pensando em usar alter session nsl_lang, sera que resolve ???? ainda não achei os parametros corretos para utf8.
04/07/2006
Rosterne
UTF8 é Multibytes, ou seja, pra cada caracter são 2 ou 3 bytes. O Oracle trata isso da seguinte forma:
Pra CHARACTER SET Multibytes, ultiliza-se o NATIONAL CHACTER pra os campos NVARCHAR, NCHAR etc. setado no oracle pelo variável NLS_NCHAR_CHARACTERSET.
Como sua aplicação está rodando em UTF8 sugiro q vc utilize campos NVARCHAR, NCHAR etc. ou altere do CHARACTER SET de sua aplicação para
WE8MSWIN1252 ou WE8ISO8859P1(WE8ISO8859-15)
Espero ter ajudado.
04/07/2006
Rogeriorock
A rotina esta certa. tanto que na aplicação que eu fiz vc pode manter diretamente para o banco, quando se faz isto fuciona sem problemas, pq o oledb.net do oracle trata isto.O problema e quando o arquivo texto e criado, pq ele e criado com o padrão utf8, pq e o padrão que a microsoft limitou a plataforma por questões de segurança.pq tem alguns truques que se aproveitam da variedade de tipos de codepage.E se eu não conseguir resolver via banco eu vou ter que apelar pro velho C. e criar uma dll. Por isto queria realmente fazer o banco ver a codificação utf8, pq e a unica disponivel com acentos. Na plataforma.
04/07/2006
Rosterne
entendi agora. Pelo que você mencionou, a aplicação gera o arquivo em UTF8, sendo que o banco e o S.O. está em WE8MSWIN1252.
Unico jeito que vejo, seria vc mudar o codeset na criação do arquivo texto, ou seja, na aplicação que gera o arquivo ou utilizar o C como vc mencionou, pois trata-se de acentuação em nome de objeto.
Você poderia também fazer um spool dentro do banco utilizando o pacote DBMS_METADATA pra gerar os metadados dos objetos, com isso você não teria problema de acentuação já que o Oracle e o S.O têm o mesmo CHARACTER SET.
Na parte de C eu nao conheço e nao poderia te auxiliar.
Abraço.
04/07/2006
Rogeriorock
Mt Obrigado pela paciencia,eu realmente não queria mas se não tem outro geito vou apelar pro codigo não gerenciado mesmo.O pacote não me server pq a aplicação e justamente para criar e gerenciar os objetos do banco,portanto eu não posso usar o dicionario de objetos pq poderia cair em situações que eles não existicem ainda.Mas de qualquer forma obrigado novamente. E no que puder ajudar estamos as ordens.
Clique aqui para fazer login e interagir na Comunidade :)