다음을 통해 공유


유니코드 서버와 비유니코드 클라이언트간 데이터 변환 관리

이 항목에서는 서버측 데이터 저장소가 유니코드이고 데이터와 상호 작용하는 클라이언트측 응용 프로그램이 특정 코드 페이지를 사용하는 경우 문자 데이터의 무결성을 유지하는 방법을 설명합니다.

데이터 입력

클라이언트에서 보내는 비유니코드 데이터가 서버에 유니코드로 저장되는 경우 다음 조건 중 하나에 해당하면 코드 페이지를 사용하는 모든 클라이언트에서 보내는 데이터가 올바르게 저장됩니다.

  • 서버에 문자열을 RPC(원격 프로시저 호출)의 매개 변수로 보냅니다.

  • 문자열 상수 앞에 대문자 N이 있습니다. 이는 사용하는 클라이언트측 응용 프로그램에서 유니코드를 인식하는지 여부와 관계없이 필요합니다. 접두사 N이 없으면 SQL Server에서 데이터베이스의 기본 데이터 정렬에 해당하는 코드 페이지로 문자열이 변환됩니다. 이 코드 페이지에 없는 문자는 모두 손실됩니다.

데이터 검색

클라이언트 응용 프로그램에서 유니코드를 사용하지 않고 비유니코드 버퍼로 데이터를 검색하는 경우 클라이언트가 검색하거나 수정할 수 있는 데이터는 클라이언트 컴퓨터의 코드 페이지에서 표현할 수 있는 데이터로 한정됩니다. 즉, ASCII 문자는 모든 코드 페이지에서 동일하게 표현되므로 항상 검색 가능하지만 비-ASCII 데이터는 코드 페이지 간의 변환에 따라 달라집니다.

예를 들어 현재 미국에서만 실행되고 있는 응용 프로그램을 일본에 배포한다고 가정합니다. SQL Server 데이터베이스에서 유니코드를 인식하기 때문에 텍스트를 유니코드로 처리하도록 응용 프로그램을 아직 수정하지 않았어도 영어와 일본어 텍스트를 모두 같은 테이블에 저장할 수 있습니다. 응용 프로그램이 이전의 두 옵션 중 하나에 맞으면 일본 사용자는 비유니코드 응용 프로그램을 사용하여 일본어 데이터를 입력 및 검색하고 미국 사용자는 영어 데이터를 입력 및 검색할 수 있습니다. 두 사용자 그룹의 모든 데이터는 데이터베이스의 동일 열에 그대로 저장되고 유니코드로 표현됩니다. 이 경우 유니코드를 사용하는 보고 응용 프로그램을 배포할 수 있습니다. 이 보고 응용 프로그램은 전체 데이터 집합을 포괄하는 보고서를 생성합니다. 그러나 영어 사용자는 응용 프로그램에서 해당 코드 페이지(1252)에 없는 문자를 표시할 수 없으므로 일본어 열을 볼 수 없습니다.

두 사용자 그룹이 서로의 레코드를 볼 필요가 없는 경우에는 이 상황이 문제가 되지 않습니다. 응용 프로그램 사용자가 단일 코드 페이지로 표현할 수 없는 텍스트가 포함된 레코드를 보거나 수정해야 할 경우에는 유니코드를 사용할 수 있도록 응용 프로그램을 수정하는 방법밖에 없습니다.

웹 기반 응용 프로그램

클라이언트측 프로그램이 웹 기반이거나 ASP(Active Server Pages) 페이지에 연결하는 경우 클라이언트측 HTML 페이지와 서버측 ASP 페이지에 모두 메타데이터 사양이 있습니다. 서버, ASP 엔진 및 클라이언트 브라우저 간의 문자열 변환 방법을 지정하려면 이러한 사양을 만들어야 합니다.

클라이언트측 HTML 페이지에서 META 특성은 CHARSET 코드를 지정하여 문자 집합 데이터를 클라이언트의 인코딩 스키마로 변환하도록 지정해야 합니다. 예를 들어 다음 HTML 페이지는 CHARSET 코드로 big5를 지정하여 클라이언트가 문자 데이터를 950(중국어 번체) 코드 페이지로 변환하도록 합니다.

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=big5">
<!-- 
     
-->
</HEAD>
<BODY>
<!--
   body
-->
</BODY>
</HTML>

서버측 ASP 페이지에서는 ASP 웹 응용 프로그램에 클라이언트 브라우저가 사용하고 있는 코드 페이지를 알려 줘야 합니다. Session.CodePage 속성이나 @CodePage 지시어를 지정할 수 있습니다. 이러한 방법은 서버에서 클라이언트로의 데이터 변환은 물론 GET 및 POST 클라이언트 요청도 모두 처리합니다. 다음 예에서는 두 가지 방법을 모두 사용하여 서버와 클라이언트의 코드 페이지간 변환을 지정합니다. 여기서 코드 페이지는 950(중국어 번체)입니다.

<%@ Language=VBScript codepage=950 %>
<%  Session.CodePage=950 %>

마지막으로 모든 문자열 리터럴 앞에 N을 붙이는 것을 기억해야 합니다.