반응형

문자열의 코드 변환하기

 

Microsoft Premier Field Engineer

한대성

 

 Question
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

 

 

 

 

반응형

+ Recent posts