Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 15 do total)
  • Autor
    Posts
  • #81575
    madcapone
    Participante

      Bom, gostaria de dizer que só estou criando um tópico novo porquê o do Renato ficou sem solução (ele mesmo não deu retorno), mas como tem várias respostas, talvez não chame atenção para mais ajuda.

      O problema: as letras acentuadas vêm substituídas por não acentuadas ou pontos de interrogação. Ainda não testei a inserção, mas as consultas vêm com problema.

      Os documentos todos possuem header:

      O httpd.conf está configurado com:
      AddLanguage pt .pt
      AddLanguage pt-BR .pt-br
      LanguagePriority pt-BR en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt ru sv zh-CN zh-TW
      ForceLanguagePriority Prefer Fallback
      AddDefaultCharset ISO-8859-1
      AddCharset ISO-8859-1 .iso8859-1 .latin1
      AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen

      Resultado do comando locale:
      LANG=en_US.UTF-8
      LC_CTYPE="en_US.UTF-8"
      LC_NUMERIC="en_US.UTF-8"
      LC_TIME="en_US.UTF-8"
      LC_COLLATE="en_US.UTF-8"
      LC_MONETARY="en_US.UTF-8"
      LC_MESSAGES="en_US.UTF-8"
      LC_PAPER="en_US.UTF-8"
      LC_NAME="en_US.UTF-8"
      LC_ADDRESS="en_US.UTF-8"
      LC_TELEPHONE="en_US.UTF-8"
      LC_MEASUREMENT="en_US.UTF-8"
      LC_IDENTIFICATION="en_US.UTF-8"
      LC_ALL=

      O resultado de locale -a exibe uma quantidade enorme de siglas, incluindo:
      pt_BR
      pt_BR.iso88591
      pt_BR.utf8
      pt_PT
      pt_PT@euro
      pt_PT.iso88591
      pt_PT.iso885915@euro
      pt_PT.utf8

      Se for necessário, posto os conteúdos dos arquivos lang.sh e lang.csh localizados em /etc/profile.d. (Não sei para que servem e não entendi nada de seus conteúdos. Mas vi referências em outros lugares e fiquei na dúvida se podem ser úteis ou não para esta situação).

      Gostaria de saber:
      1. A alteração das configurações do SO pode resolver o problema do charset no oracle?
      2. Se sim, como altero essas configurações?
      3. Existem parâmetros configuráveis do client do Oracle neste servidor? Como alterá-los?

      O sistema é o CentOS 4, as páginas são exibidas em PHP4, servidor Apache 1. O banco de dados (Oracle 9i) está em outra máquina, mas com certeza foi criado usando charset PT BR.

      Agradeço qualquer ajuda.

      #81576
      Ishii
      Participante

        Olá,

        Gostaria de saber:
        1. A alteração das configurações do SO pode resolver o problema do charset no oracle?
        2. Se sim, como altero essas configurações?
        3. Existem parâmetros configuráveis do client do Oracle neste servidor? Como alterá-los?

        Vamos as informações que posso ajudar…
        1- Não, o Oracle tem suas próprias configurações de Caracter Set. Isso deve ser definido na Criação do Banco de Dados mas isso não altera o seu conteúdo. No link http://download.oracle.com/docs/cd/B193 … m#CEGHDCJF tem um pouco mais de informações sobre o CSALTER que é um script que altera esta configuração de charset mas não muda os dados…
        2- Como respondi é possível alterar o charset mas não os dados migrados sem uma conversão (que é manual….);
        3- Não tenho certeza se alterar o Client do Oracle vai ajudar em alguma coisa neste caso….

        []s Ishii

        #81577
        madcapone
        Participante

          Pois é, eu já tinha visto esse CSALTER, mas pelo que entendi ele serve para alterar as configurações do BD. Essas estão ok. Possuo um ambiente de testes localmente, com PHP5, client 10g, Apache 2.2, e apesar das diferenças (e considerando-se alguns scripts para compatibilização de funções entre php5 e 4), tudo funciona normalmente.

          Localmente os resultados das pesquisas vêm corretos. Além disso, existem várias aplicações funcionando nessa mesma instância de BD, todas ok. Se fosse um problema no BD, pará-lo seria um problemão.

          Li em algum lugar (depois de tanta pesquisa, difícil lembrar onde) que o Oracle prioriza as configurações do sistema operacional na hora de retornar os resultados. Essa informação provavelmente é passada pelo client. Então suponho que existam dois métodos para a resolução desse problema: configurar o client ou configurar o OS.

          Obrigado pela resposta. Vou continuar procurando.

          Alguém conhece um fórum de CentOS???

          #81578
          Ishii
          Participante

            Olá,

            Só para eu entender então:

            Os resultados das consultas cujo o conteúdo possuem caracteres acentuados está vindo com ponto de interrogação ou sem acentuação e isso ocorre na Aplicação PHP e no sql*plus também? Ou se você consultar o resultado com um client tipo TOAD, PL/SQL Developer ou SQL Developer sai correto ou não?

            Em resumo o dado armazenado no Oracle está correto mas o retorno em tela não – na aplicação ou nenhuma das anteriores?

            []s Ishii

            #81579
            madcapone
            Participante

              Ambos. Caracteres como áéíóú são substituídos por aeiou. Outros como ãç são substituídos por ??.

              As consultas no ambiente local retornam caracteres acentuados corretamente, bem como através do TOAD. Essa base de dados está up há anos. Iniciamos em 2002 com a versão 8 (acho) e depois migramos para versão 9i.

              Os dados estão armazenados corretamente, e o erro só se manifesta nesta aplicação específica neste servidor CentOS4 específico. =)

              Testei para ver se poderia ser um erro nas configurações de região do Apache (httpd.conf etc) ou do PHP, de codificação das páginas, ou mesmo programação, mas não é. O OCI está retornando os caracteres substituídos mesmo.

              Idéias? =)

              Valeu. []’s

              #81580
              Ishii
              Participante

                Bom, para ter certeza que o problema está no SO do Servidor faça um teste no PHP colocando o echo destes caracteres áéíóú e veja o retorno e faça o mesmo teste num html simples no apache…

                🙁

                []s Ishii

                #81581
                madcapone
                Participante

                  Ok. Feito … Ambos produziram resultados normais.

                  Eu já tinha realizado esse teste antes, mas diz novamente por desencargo de consciência.

                  . Os simples echo’s resultam normalmente.
                  . A utilização tanto de htmlentities quanto o decode também exibem caracteres corretamente.
                  . Os caracteres em html simples são exibidos corretamente tanto no formato direto “áéíóú” quanto nos áé e etc.

                  Mas nem era necessário realizar estes testes. As páginas são exibidas todas corretamente, com exceção das áreas em que resultados trazidos do banco são exibidos. Nestes os caracteres são substituídos. =(

                  Postei também no http://centosbr.org/ para ver se alguém tem uma idéia. Se resolver, posto por aqui.

                  Obrigado!!

                  #81582
                  Ishii
                  Participante

                    Olá,

                    Vai mais uma tentativa…

                    No profile do usuário oracle da máquina client (que é o CentOS) verifique se existe o parâmetro NLS_LANG e qual o valor dele. Se não existir crie e exporte este parâmetro com o valor NLS_LANG=BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1

                    E vamos tentando até saber a solução correta. (que normalmente deve ser bastante simples…)

                    []s Ishii

                    #81584
                    madcapone
                    Participante

                      =) Beleza!

                      Mas como faço isso? Sei nada de unix|linux, nem sei o que CentOS é. rsrs

                      Valeu.

                      #81592
                      Ishii
                      Participante

                        Huumm,

                        Melhor verificar então com quem fez a instalação do CentOS pois pode ter sido utilizado o instantclient do Oracle ou uma instalação do Client do Oracle 9i mesmo mas o melhor seria ter certeza para se alterar corretamente. Para ter uma idéia no Client 9i normal deve ter um usuário Oracle no SO com profile criado mas no instantclient isso não é necessário….

                        []s Ishii

                        #81595
                        madcapone
                        Participante

                          Ok.
                          Obrigado pela atenção.

                          #81609
                          madcapone
                          Participante

                            Olá! Descobri que é Oracle 10g, client 10.1.3. Isso ajuda a identificar onde fica o profile?

                            Grato.

                            #81610
                            Marcio68Almeida
                            Participante

                              [quote=”madcapone”:39f61j69]Olá! Descobri que é Oracle 10g, client 10.1.3. Isso ajuda a identificar onde fica o profile?
                              [/quote]

                              O profile, ou melhor o .profile (tem um ponto na frente do nome, fica no diretório raíz do usuário, mas se você não entende de Linux, é perigoso altera-lo.
                              Você pode dar o comando ls -la assim que se logar no linux e verá o arquivo…

                              #81611
                              madcapone
                              Participante

                                Oi, Márcio! Na verdade, acho que ele estava falando de um profile do client do Oracle … mas não tenho certeza! Mesmo assim, obrigado! Vou dar uma olhada!

                                Não sei muito de Linux, mas entendo de programação, não vou fazer besteira, não se preocupe. =) De qualquer forma, só altero o que entender.

                                No mais, descobri um arquivo dentro da pasta do Oracle
                                /u01/app/oracle/product/10.1.3/Apache/Apache/bin
                                chamado apachectl com a seguinte entrada:

                                NLS_LANG=${NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″}; export NLS_LANG

                                Fiz a seguinte alteração:

                                #NLS_LANG=${NLS_LANG=”AMERICAN_AMERICA.WE8ISO8859P1″}; export NLS_LANG
                                NLS_LANG=${NLS_LANG=”BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1″}; export NLS_LANG

                                e depois restartei o Apache (service httpd restart).

                                Mesmo assim o erro persiste!! =( =( =(
                                Tá ruim o trem …

                                #81615
                                madcapone
                                Participante

                                  Eu executei

                                  LANG=pt_BR.iso88591
                                  export LANG

                                  e reiniciei o Apache. Ainda assim os resultados obtidos não exibem corretamente os caracteres acentuados.

                                  Esse comandos são suficientes para alterar as configurações locais no UNIX? Percebi que não importa o que eu digite em LANG= não há mensagem de erro. Como saber se o valor digitado é reconhecido?

                                  Obrigado.

                                Visualizando 15 posts - 1 até 15 (de 15 do total)
                                • Você deve fazer login para responder a este tópico.