conversão de caracteres

Cara estou fazendo um teste para conversão de caracteres no banco oracle 8i o código é o seguinte:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.sql.CHAR;
import oracle.sql.CharacterSet;

public class TestaBanco {

private static final String sql = "SELECT ESPL_CODIGO AS Codigo, ESPL_DESCRICAO as Descricao FROM LIVRETO, ESPECIALIDADE_LIVRETO WHERE LIVR_ESPL_CODIGO = ESPL_CODIGO GROUP BY ESPL_CODIGO, ESPL_DESCRICAO ORDER BY ESPL_DESCRICAO";

/**
 * @param args
 */
public static void main(String[] args) {

	ConnectionDB dados = new ConnectionDB();
	Connection con = dados.openConnection();

	int charId = CharacterSet.UTF8_CHARSET;
	CharacterSet charset = CharacterSet.make(charId);

	try {
		Statement stmt = con.createStatement();

		ResultSet rs = stmt.executeQuery(sql);

		System.out
				.println("+---------------------------------------------------------------+");
		while (rs.next()) {

			String cod = rs.getString("Codigo");
			CHAR des = new CHAR(rs.getString("Descricao"),charset);

			System.out.println("| Código: " + cod + " Descrição: " + des);
			System.out
					.println("+---------------------------------------------------------------+");
		}

	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		dados.closeConnection();
	}
}

}

e o valor retornado é o seguinte:
±--------------------------------------------------------------+
| Código: 198 Descrição: TONOMETRIA DE APLANAC?O
±--------------------------------------------------------------+
quando deveria ser
±--------------------------------------------------------------+
| Código: 198 Descrição: TONOMETRIA DE APLANAÇÃO
±--------------------------------------------------------------+
alguem pode me ajudar

eh possivel que o charset do oracle nao esteja setado para utf8, nesse caso, quando o dado foi inserido no oracle eh que ele “estragou”, e o seu select ja vai vir “estragado”, e nao tem nada no java que vc possa fazer para consertar isso.

tenta dar esse select na mão (pelo sqlplus ou similar) e veja o que aparece… se estiver com o ? no lugar do acento é o oracle mesmo, dai da uma pesquisada como trocar charset do oracle…

[]s

Então cara no oracle mostra sertinho

Ja to no desespero faz dois dias q to tentando resolver isso e ñ consigo

tem mais alguma idéia para me dar?

valeu a atenção

essa saida vc ta vendo no DOS? tenta criar um arquivo HTML com essa saida, pode ser que o java esteje tratando tudo corretamente e seje erro somente na hora de mostrar a string.

ñ no eclipse.

Ja procurei de tudo na net para ver se acha algo neste sentido mais nada ñ possível q nunca alguem precisou de algo do genero rs…

mais valeu carinha obrigado pela atenção, se tiver mais alguma idéia estamos ai.

vc ja deve ter tentadao, mas e se vc pegar a descrição em uma String, e nao um CHAR?

Qual o charset e language do banco de dados (Oracle)?
Qual o valor da propertie file.encoding da máquina que você está rodando?
Qual o tipo da coluna ESPL_DESCRICAO no Oracle?
O objetivo deste código é converter os caracteres de saída em UTF-8 independente do charset que foi gravado no banco?

mais ai em q momento eu faço a conversão?

Então cara o charset do banco é WE8ISO8859P9 e a language é AMERICAN_AMERICA.WE8ISO8859P1
A propriedade do file.encoding eu ñ sei te falar
A coluna ESPL_DESCRICAO é varchar2
E meu objetido é exibir os dados na tela com os caracteres acentuados e tal, como está no banco.

Fico grato se puder me ajudar e tbm pela atenção

Se não precisa transformar em UTF-8, não precisa fazer a conversão da String:

CHAR des = new CHAR(rs.getString("Descricao"),charset);

Use:

String des = rs.getString("Descricao");

Se mesmo assim continuar o problema, tente usar como charset da aplicação o charset do banco (WE8ISO8859P9).

Ah, e para saber o file.encoding da sua máquina, é só fazer um getProperty em java:

System.out.println(System.getProperty("file.encoding"));

Cara ainda ñ rolou ele começa a exibir os dados e quando chega na hora de exiber os dados com caracteres acentuados ele para e joga um erro na tela que é o seguinte

+---------------------------------------------------------------+
| Código: 78 Descrição: CARDIOTOCOGRAFIA FETAL
+---------------------------------------------------------------+
| Código: 81 Descrição: CATETERISMO URETRAL
+---------------------------------------------------------------+
java.sql.SQLException: Cannot map Unicode to Oracle character.
	at oracle.sql.converter.CharacterConverter1Byte.toOracleCharacter(CharacterConverter1Byte.java:150)
	at oracle.sql.converter.CharacterConverter1Byte.toOracleString(CharacterConverter1Byte.java:236)
	at oracle.sql.CharacterSetWithConverter.convert(CharacterSetWithConverter.java:144)
	at oracle.sql.CHAR.<init>(CHAR.java:109)
	at TestaBanco.main(TestaBanco.java:35)

O meu file.encoding é ISO-8859-1

ja tentei so com

String des = rs.getString("Descricao");

e o resultado é o mesmo dos aonteriores

Cara deixa quieto descobri o problema.

Era o Banco Oracle

Mais valeu a ajuda de todos

Obrigadão

Olá,

sou novo no forum mas deparo-me com a mesma excepção ao tentar passar dados de um XML para a BD Oracle.
Neste contexto, a codificação é UFT-8 (XML) para ISO-8859-15 (DB Oracle).
Faço o encoding da string…penso que está correcto

byte[] bs = xml.getValor().getBytes(“ISO-8859-15”);
String s = new String (bs, “ISO-8859-15”));

Quando vou a registar a string no OCS dá-me a mesma excepção que te dava a ti.
java.sql.SQLException: Cannot map Unicode to Oracle character

Podes-me dizer de como resolveste a tua situação? Ando já há 3 dias a tentar resolver esta situação e nada… :S

Obrigado desde já.