문자열의 코드 변환하기
Microsoft Premier Field Engineer
한대성
![]() |
text 파일에 있는 데이터를 불러오는 과정에서 codepage와 관련하여 에러가 납니다. 원본 화일에 있는 데이터가 20127이라는 코드페이지로 되어 있는데요. 그래서 1251로 전환이 안되는 데이터가 있다고 에러가 납니다. 이런경우에는 어떻게 코드 페이지를 변환 해주어야 하는건가요? |
일반적으로 열의 코드 페이지를 바꿀 때에는 다음과 같이 데이터 변환(Data Conversion)을 이용하면 됩니다.
하지만, 질문에서와 같이 일부 코드 간에는 이를 이용해서 처리할 수 없는 경우가 있습니다.
예) 원본 CodePage : 20127 변환 CodePage : 1252
이 경우에는 다음과 같이 스크립트 변환을 이용하여 처리할 수 있습니다.
다음과 같이 데이터 원본 뒤에 스크립트 변환을 추가합니다.
스크립트 변환의 입력 열 속성에서 변환하고자 하는 열을 선택합니다.
입/출력 탭에서 Output0 (또는 출력0 으로 나타남)을 확장한 다음, 변환되어 출력될 열을 추가합니다. 이 때 열의 유형을 원하는대로 설정합니다.
스크립트 탭에서 스크립트 편집기를 연 다음, 아래와 같은 코드를 입력합니다.
Imports System Imports System.Data Imports System.Math Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Public Class ScriptMain Inherits UserComponent
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) Dim enc As New System.Text.ASCIIEncoding Dim Str1 As String, Str2 As String Str1 = enc.GetString(EncodeString(Row.AddressLine1.ToString, 1252)) Str2 = enc.GetString(EncodeString(Row.AddressLine2.ToString, 1252))
Row.ConvAddress1 = Str1 Row.ConvAddress2 = Str2
End Sub
Function EncodeString(ByRef SourceData As String, ByRef CharSet As Integer) As Byte() Dim bSourceData As Byte() = System.Text.Encoding.Unicode.GetBytes(SourceData) Dim OutEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(CharSet)
Return System.Text.Encoding.Convert(System.Text.Encoding.Unicode, OutEncoding, bSourceData) End Function
End Class |
'연구개발 > DTS & SSIS' 카테고리의 다른 글
패키지 실행 시 매개변수 동적으로 주기 (0) | 2011.08.27 |
---|---|
병렬로 쿼리 실행하기 (0) | 2011.08.27 |
패키지 외부에서 매개 변수 값 지정하기 (0) | 2011.08.27 |
FTP 작업에서 여러 파일 보내기 (0) | 2011.08.27 |
패키지 자동으로 재 실행하도록 설정하기 (0) | 2011.08.27 |