SQLplus 및 Oracle, UTF-8이 제대로 표시되지 않음

SQLplus 및 Oracle, UTF-8이 제대로 표시되지 않음

나는 설정했다

export NLS_LANG=Italian_ITALY.UTF8

데이터베이스는 UTF-8을 사용합니다.

SELECT * FROM NLS_DATABASE_PARAMETERS
NLS_CHARACTERSET                                                            |AL32UTF8

그러나 sqlplus는 잘못된 ò à ì문자를 표시합니다.

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non pu�� intervenire

이어야 한다

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non può intervenire

나는 모두 UTF-8을 사용하는 AIX 및 Linux 클라이언트를 사용해 보았습니다.

내가 무엇을 놓치고 있나요?

답변1

질문에 실제 로케일이 언급되어 있지 않습니다. Oracle에 따르면 NLS_LANG이에 대응하도록 설정되어야 합니다. 실제 로케일이 UTF-8을 사용하지 않는 경우 질문에 표시된 대체 문자를 얻게 됩니다.

추가 자료:

UNIX에서 NLS_LANG을 올바르게 설정하는 방법

클라이언트 Oracle 소프트웨어의 로케일 동작을 지정하려면 다음을 설정해야 합니다.NLS_LANG범위. 클라이언트의 언어, 지역 및 문자 집합을 설정합니다. 설정하려면 로케일 설정을 확인해야 합니다.NLS_LANG세 번째 필드(문자 집합)는 이와 일치합니다. 이렇게 하려면 다음과 같이 "locale" 명령을 사용하십시오.

7- 로케일 설정 및 NLS_LANG 만들기필요데이터베이스 문자 집합과 일치합니까?
아니요, 로케일 및NLS_LANG설정(및 해당되는 경우 telnet/ssh 구성)이 일치해야 하지만 그 중 어느 것도 기술적으로 데이터베이스 문자 집합과 관련이 없으며 해당 클라이언트 환경에만 관련됩니다.

답변2

데이터베이스의 텍스트에 올바른 문자가 있습니까? 즉, 데이터베이스로 들어가는 도중 손상되지 않았는지 확인했습니까? sqlplus의 출력을 파이프 od -t x1z하고 이를 사용하여 데이터베이스가 올바른 인코딩을 출력하는지 확인할 수 있습니다. 인코딩이 올바른 경우 결함은 다른 곳에 있습니다.

표시되는 설정은 데이터베이스와 Oracle 클라이언트가 UTF-8을 사용하도록 성공적으로 설정되어야 함을 확인합니다. 그런 다음 Oracle 클라이언트가 문자(예 sqlplus: )를 출력하면 운영 체제에서 처리됩니다.

운영 체제의 로케일을 확인하기 위해 해당 명령을 사용했는지는 확실하지 않지만 locale사용했다고 가정합니다.

stty설정도 확인하셨나요 ? 이러한 설정이 8비트 클린이 아닌 경우 전송 중에 UTF-8 문자가 손상됩니다. 하지만 문제는 아닌 것 같습니다. UTF-8 인코딩은 ò0xc3 0xb2입니다. 가장 높은 비트가 0으로 강제 설정되면 0x43 0x32가 되거나 대문자 C와 숫자 2가 됩니다. 모두 유효한 UTF-8 문자입니다.

다음 캐릭터를 처리하는 것은 당신의 몫입니다터미널 에뮬레이터: Windows를 사용하는 경우 일반적으로 PuTTY일 것입니다. 매우 오래된 버전의 PuTTY(0.62 이하)는 기본적으로 ISO-8859-1 문자 집합을 사용하며, 최신 버전에서는 특별히 다르게 선택하고 새 기본값을 저장하지 않는 한 기본적으로 UTF-8을 사용합니다.

실제로 싱글은 ò다음과 같이 매핑됩니다.문자는 터미널 에뮬레이터가 UTF-8로 구성되지 않고 단일 바이트 문자를 사용하는 일부 문자 집합으로 구성되어 있음을 나타냅니다.

òUTF-8의 2바이트를 알 수 없는 문자를 나타내는 기호로 대체하는 것처럼 보이기 때문에 직선 ASCII를 예상하도록 구성할 수도 있습니다. 따라서 터미널 에뮬레이터에는 7비트 ASCII 세트 이외의 문자가 필요하지 않거나 현재 사용 중인 글꼴에 바이트 0xc3 및 0xb2에 해당하는 문자 모양(글리프)이 없습니다.

따라서 터미널 에뮬레이터 설정에서 두 가지 사항을 수정해야 합니다.

먼저 UTF-8로 설정해야 합니다.문자 집합현재 예상되는 것보다. 이 작업이 성공적으로 완료되면 해당 편지는 ò다음 위치에 매핑되어야 합니다.하나둘이 아닌 캐릭터. 그럴 수도 있고 아닐 수도 있다옳은하지만 두 글자가 아닌 한 글자만 표시하는 것이 중요합니다.

표시된 문자가 여전히 올바르지 않으면 터미널 에뮬레이터에서 사용하는 글꼴에 실제로 문자 모양이 있는지 확인해야 합니다 ò.

관련 정보