XML 직렬화에 StringWriter 사용


99

현재 개체를 직렬화하는 쉬운 방법을 찾고 있습니다 (C # 3).

몇 가지 예를 검색하여 다음과 같은 결과를 얻었습니다.

MemoryStream memoryStream = new MemoryStream ( );
XmlSerializer xs = new XmlSerializer ( typeof ( MyObject) );
XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );
xs.Serialize ( xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());

질문을 읽은 후 StringWriter를 사용하지 않는 이유는 무엇입니까? 훨씬 쉬워 보입니다.

XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();

또 다른 문제는 첫 번째 예제에서 생성 된 XML이 SQL Server 2005 DB의 XML 열에 쓸 수 없다는 것입니다.

첫 번째 질문은 다음과 같습니다. 나중에 문자열로 필요할 때 StringWriter를 사용하여 개체를 직렬화하면 안되는 이유가 있습니까? 인터넷 검색을 할 때 StringWriter를 사용하여 결과를 찾지 못했습니다.

두 번째는 물론입니다. 어떤 이유로 든 StringWriter를 사용하지 말아야한다면 어떤 방법이 좋을까요?


덧셈:

두 답변에서 이미 언급했듯이 XML to DB 문제에 대해 더 자세히 살펴 보겠습니다.

데이터베이스에 쓸 때 다음 예외가 발생했습니다.

System.Data.SqlClient.SqlException : XML 구문 분석 : 줄 1, 문자 38, 인코딩을 전환 할 수 없습니다.

문자열

<?xml version="1.0" encoding="utf-8"?><test/>

XmlTextWriter에서 만든 문자열을 가져 와서 거기에 xml로 넣었습니다. 이것은 작동하지 않았습니다 (DB에 수동으로 삽입하지 않음).

그 후 수동 삽입 (INSERT INTO ... 작성)을 encoding = "utf-16"으로 시도했지만 실패했습니다. 그런 다음 인코딩을 완전히 제거했습니다. 그 결과 나는 StringWriter 코드로 다시 전환하고 짜잔-작동했습니다.

문제 : 나는 그 이유를 정말로 이해하지 못합니다.

at Christian Hayter : 이러한 테스트를 통해 DB에 쓰기 위해 utf-16을 사용해야할지 모르겠습니다. 인코딩을 UTF-16 (xml 태그에서)으로 설정하면 작동하지 않습니까?


1
나는 개인적인 경험을하고있다. SQL Server는 UTF-16 만 허용하며 다른 것을 전달하면 SQL Server XML 파서와 데이터 변환 시도에 따라 달라집니다. 속이는 방법을 찾는 대신 UTF-16을 직접 전달하기 만하면 항상 작동합니다.
Christian Hayter

이것을 데이터베이스에 어떻게 쓰고 있습니까? 문자열이나 바이트 배열을 전달하거나 스트림에 쓰고 있습니까? 후자의 두 가지 형식 중 하나 인 경우 선언 된 인코딩이 바이너리 데이터의 실제 인코딩과 일치하는지 확인해야합니다.
Jon Skeet

휴. MS SQL Management Studio에서 쿼리로 만든 수동 시도. "코딩 된"시도는 문자열에 쓰여진 다음 문자열로 쓰는 O / R 매퍼에 전달되었습니다 (내가 따를 수있는 한). 사실 나는 내 질문에 주어진 두 가지 예에서 만들어진 문자열을 전달하고 있습니다.
StampedeXV


1
실제로 내 질문에 대한 답변이라고 생각하므로 수락 된 답변을 변경하고 있습니다. 다른 답변이 내 작업을 계속하는 데 도움이되었지만 Stackoverflow의 목적을 위해 Solomon의 답변이 다른 사람들이 일어난 일을 더 잘 이해하는 데 도움이 될 것이라고 생각합니다. [면책 조항] : 실제로 답을 확인할 시간을 찾지 못했습니다.
StampedeXV

답변:


1

<TL; DR> 문제는 사실 다소 간단합니다. 선언 된 인코딩 (XML 선언에서)이 입력 매개 변수의 데이터 유형과 일치하지 않습니다. 수동으로 추가 한 경우 <?xml version="1.0" encoding="utf-8"?><test/>문자열로, 다음은 선언 SqlParameter형으로 SqlDbType.Xml또는 SqlDbType.NVarChar당신에게 "인코딩을 전환 할 수 없습니다"오류를 줄 것이다. 그런 다음 T-SQL을 통해 수동으로 삽입 할 때 선언 된 인코딩을로 전환했기 때문에 문자열 utf-16을 명확하게 삽입했습니다 VARCHAR(대문자 "N"접두어가 없으므로 UTF-8과 같은 8 비트 인코딩). NVARCHAR문자열이 아닙니다 (대문자 "N"이 접두사로 붙으므로 16 비트 UTF-16 LE 인코딩).

수정은 다음과 같이 간단해야합니다.

  1. 첫 번째 경우에는 다음과 같은 선언을 추가 할 때 encoding="utf-8" XML 선언을 추가하지 마십시오.
  2. 두 번째 경우에는 다음과 같은 선언을 추가 할 때 encoding="utf-16":
    1. 단순히 XML 선언을 추가하지 마십시오. 또는
    2. 입력 매개 변수 유형에 "N"을 추가하기 만하면됩니다 : SqlDbType.NVarChar대신 SqlDbType.VarChar:-) (또는를 사용하여 전환 할 수도 있습니다 SqlDbType.Xml)

(자세한 답변은 아래 참조)


여기에있는 모든 답변은 지나치게 복잡하고 불필요합니다 (각각 Christian의 답변과 Jon의 답변에 대한 121 개 및 184 개의 찬성 투표에 관계없이). 작동하는 코드를 제공 할 수 있지만 실제로 질문에 대답하는 사람은 없습니다. 문제는 아무도 진정으로 질문을 이해하지 못했다는 것입니다. 궁극적으로 SQL Server의 XML 데이터 유형이 어떻게 작동하는지에 대한 것입니다. 이 두 명의 똑똑한 사람을 상대로 한 것은 아니지만이 질문은 XML로 직렬화하는 것과는 거의 관련이 없습니다. XML 데이터를 SQL Server에 저장하는 것은 여기에 암시 된 것보다 훨씬 쉽습니다.

SQL Server에서 XML 데이터를 만드는 방법에 대한 규칙을 따르는 한 XML이 어떻게 생성되는지는 실제로 중요하지 않습니다. 이 질문에 대한 대답에 대한 자세한 설명 (아래에 설명 된 요점을 설명하는 작업 예제 코드 포함)이 있습니다. XML을 SQL Server에 삽입 할 때 "인코딩을 전환 할 수 없습니다"오류를 해결하는 방법 이지만 기본 사항은 다음과 같습니다.

  1. XML 선언은 선택 사항입니다.
  2. XML 데이터 유형은 문자열을 항상 UCS-2 / UTF-16 LE로 저장합니다.
  3. XML이 UCS-2 / UTF-16 LE이면 다음을 수행합니다.
    1. 데이터를 NVARCHAR(MAX)또는 XML/ SqlDbType.NVarChar(maxsize = -1) 또는 SqlDbType.Xml으로 전달하거나 문자열 리터럴을 사용하는 경우 대문자 "N"접두사를 붙여야합니다.
    2. XML 선언을 지정하는 경우 "UCS-2"또는 "UTF-16"이어야합니다 (실제 차이는 없음).
  4. XML이 8 비트로 인코딩 된 경우 (예 : "UTF-8"/ "iso-8859-1"/ "Windows-1252") 다음을 수행합니다.
    1. 인코딩이 데이터베이스의 기본 데이터 정렬에 지정된 코드 페이지와 다른 경우 XML 선언을 지정해야합니다.
    2. 데이터를 VARCHAR(MAX)/ SqlDbType.VarChar(maxsize = -1) 로 전달해야합니다 . 또는 문자열 리터럴을 사용하는 경우 대문자 "N"을 접두사로 사용 하지 않아야 합니다 .
    3. 어떤 8 비트 인코딩이 사용 되든 XML 선언에 명시된 "인코딩"은 바이트의 실제 인코딩과 일치해야합니다.
    4. 8 비트 인코딩은 XML 데이터 유형에 의해 UTF-16 LE로 변환됩니다.

점은 염두에 위에서 설명한, 함께 하고 주어진 .NET에서 문자열이 있음을 항상 UTF-16 LE / UCS-2 LE, 우리는 당신의 질문에 대답 할 수 있습니다 (인코딩 측면에서 그 사이에는 차이가 없다)

나중에 문자열로 필요할 때 StringWriter를 사용하여 Object를 직렬화하면 안되는 이유가 있습니까?

아니요, 귀하의 StringWriter코드는 괜찮은 것 같습니다 (적어도 질문의 두 번째 코드 블록을 사용하는 제한된 테스트에서 문제가 없음).

인코딩을 UTF-16 (xml 태그에서)으로 설정하면 작동하지 않습니까?

XML 선언을 제공 할 필요는 없습니다. 누락 된 경우 문자열을 NVARCHAR(예 SqlDbType.NVarChar) 또는 XML(예 SqlDbType.Xml) 로 SQL Server에 전달 하면 인코딩이 UTF-16 LE로 간주됩니다 . 인코딩은 VARCHAR(예 :) 로 전달되는 경우 기본 8 비트 코드 페이지로 간주됩니다 SqlDbType.VarChar. 비표준 ASCII 문자 (즉, 값 128 이상)가 있고로 전달되는 경우 VARCHAR"?"가 표시 될 수 있습니다. BMP 문자 및 "??" SQL Server와 같은 보조 문자의 경우 UTF-16 문자열을 .NET에서 현재 데이터베이스 코드 페이지의 8 비트 문자열로 변환 한 후 다시 UTF-16 / UCS-2로 변환합니다. 그러나 오류가 발생해서는 안됩니다.

반면에 XML 선언을 지정하는 경우 일치하는 8 비트 또는 16 비트 데이터 형식을 사용하여 SQL Server에 전달 해야합니다 . 당신이 선언은 인코딩이 없다는 그래서 만약 하나 UCS-2, UTF-16, 당신은 있어야 로 전달 SqlDbType.NVarChar또는 SqlDbType.Xml. 또는, 당신은 인코딩 (즉, 8 비트 옵션 중 하나입니다한다는 선언이있는 경우 UTF-8, Windows-1252, iso-8859-1, 등), 당신은 해야한다 등의 전달을 SqlDbType.VarChar. 선언 된 인코딩을 적절한 8 비트 또는 16 비트 SQL Server 데이터 형식과 일치시키지 않으면 "인코딩을 전환 할 수 없습니다"오류가 발생합니다.

예를 들어, StringWriter기반 직렬화 코드를 사용하여 XML의 결과 문자열을 인쇄하고 SSMS에서 사용했습니다. 아래에서 볼 수 있듯이 XML 선언이 포함되어 있습니다 ( 좋아 StringWriter하는 옵션이 없기 때문에 ). 올바른 SQL Server 데이터 유형으로 문자열을 전달하는 한 문제가되지 않습니다.OmitXmlDeclarationXmlWriter

-- Upper-case "N" prefix == NVARCHAR, hence no error:
DECLARE @Xml XML = N'<?xml version="1.0" encoding="utf-16"?>
<string>Test ሴ😸</string>';
SELECT @Xml;
-- <string>Test ሴ😸</string>

보시다시피, BMP 코드 포인트 U + 1234이고 😸보조 문자 코드 포인트 U + 1F638 인 경우 표준 ASCII 이상의 문자도 처리합니다 . 그러나 다음은 다음과 같습니다.

-- No upper-case "N" prefix on the string literal, hence VARCHAR:
DECLARE @Xml XML = '<?xml version="1.0" encoding="utf-16"?>
<string>Test ሴ😸</string>';

다음 오류가 발생합니다.

Msg 9402, Level 16, State 1, Line XXXXX
XML parsing: line 1, character 39, unable to switch the encoding

Ergo, 모든 설명은 제쳐두고 원래 질문에 대한 완전한 해결책은 다음과 같습니다.

문자열을 SqlDbType.VarChar. 로 전환 SqlDbType.NVarChar하면 XML 선언을 제거하는 추가 단계를 거치지 않고도 작동합니다. 이 SqlDbType.VarChar솔루션은 XML에 비표준 ASCII 문자가 포함 된 경우 데이터 손실을 방지하므로 XML 선언 을 유지 하고 제거하는 것보다 선호 됩니다. 예를 들면 :

-- No upper-case "N" prefix on the string literal == VARCHAR, and no XML declaration:
DECLARE @Xml2 XML = '<string>Test ሴ😸</string>';
SELECT @Xml2;
-- <string>Test ???</string>

보시다시피 이번에는 오류가 없지만 이제 데이터 손실이 있습니다 🙀.


나는 기본적으로 두 가지 질문이 하나에 있었기 때문에이 지나치게 복잡한 답변의 이유라고 생각합니다. 나는 당신의 간결한 대답을 정말 좋아하고 다음에 XML을 DB에 저장해야 할 때 시도해 볼 것입니다. 그래서 이것이 맞다고 생각하면 XML을 DB에 저장하는 문제를 설명했습니다. Jon Skeet는 XML (UTF-16 제외) 작업시 StringWriter 사용과 관련된 문제를 요약했으며 Christian Hayter는이 작업을 수행하는 좋은 방법을 제공합니다.
StampedeXV

@StampedeXV 내 답변을 업데이트했습니다 (명확성을 위해 몇 가지 변경 + 요점을 더 잘 설명하기 위해 새로운 내용). 두 답변 모두 그 자체로는 훌륭하지만 질문에 답변하기 위해 어떤 식 으로든 필요하지 않다는 것이 이제 더 분명해지기를 바랍니다. 그들은 C # / .NET에서 XML 직렬화를 다루지 만이 질문은 실제로 SQL Server에 XML을 저장하는 것에 관한 것입니다. 그들은 알아두면 좋은 정보를 제공하고 원래 제공 한 것보다 더 나은 코드 일 수 있지만 둘 다 (여기에있는 다른 어떤 것도) 진정한 주제가 아닙니다. 그러나 이것은 잘 문서화되지 않은 것이므로 혼란이 있습니다.
Solomon Rutzky

@StampedeXV 내 수정 내용이 이해가 되었습니까? 더 명확 할 수있는 요약 섹션을 상단에 추가했습니다. 간단히 말해서, 질문에 세부 사항을 포함하지 않은 다른 일이 발생하지 않는 한, 코드가 99 % 정확하고 단일 대문자 "를 추가하여 수정되었을 수 있습니다. 엔". 특별한 인코딩이 필요하지 않으며 Christian의 코드가 좋지만 내 테스트에 따르면 XML 선언 뒤에 CRLF를 넣는 것을 제외하고 두 번째 코드 블록과 동일한 직렬화를 반환합니다. 나는 당신이 SqlDbType.NVarChar또는로 바꿨을 것 Xml입니다.
Solomon Rutzky

여전히 스스로 확인할 시간을 찾으려고합니다. 확실히 훌륭하고 논리적으로 들리지만 받아 들여진 답변을 변경하기에 충분할지는 확실하지 않습니다.
StampedeXV

216

한 가지 문제 StringWriter는 기본적으로 광고하는 인코딩을 설정할 수 없다는 것입니다. 따라서 인코딩을 UTF-16으로 광고하는 XML 문서로 끝날 수 있습니다. 즉, 다음과 같은 경우 UTF-16으로 인코딩해야합니다. 파일에 씁니다. 그래도 도움이되는 소규모 수업이 있습니다.

public sealed class StringWriterWithEncoding : StringWriter
{
    public override Encoding Encoding { get; }

    public StringWriterWithEncoding (Encoding encoding)
    {
        Encoding = encoding;
    }    
}

또는 UTF-8 만 필요한 경우 (종종 필요) :

public sealed class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding => Encoding.UTF8;
}

XML을 데이터베이스에 저장할 수없는 이유에 관해서는 우리가 진단 / 수정할 수 있도록하려면 시도했을 때 발생한 일에 대한 자세한 정보를 제공해야합니다.


이제 데이터베이스 문제에 대해 자세히 설명했습니다. 질문을 참조하십시오.
StampedeXV

4
슬프게도 StringWriter인코딩을 고려하지 않지만, 멋진 작은 방법에 감사드립니다. :)
Chau

2
그리고 "XML 구문 분석 : 줄 1, 문자 38, 인코딩을 전환 할 수 없음"은 "settings.Indent = false; settings.OmitXmlDeclaration = false;"로 해결할 수 있습니다.
MGE

나는 일반적으로 올바른 인코딩으로 a MemoryStream및 a StreamWriter를 사용하여이 문제를 해결합니다. StreamWriter TextWriter (유형 XmlWriter.Create결국, 맞춤형 인코딩은 예상).
Nyerguds

2
@Nyerguds : 그러니 이런 종류의 Nuget 패키지를 생성하면 항상 쉽게 얻을 수 있습니다. 근본적으로 다른 요구 사항에 관한 코드의 가독성을 손상시키는 것보다 차라리 그렇게하고 싶습니다.
Jon Skeet

126

XML 문서를 .NET 문자열로 직렬화 할 때 인코딩을 UTF-16으로 설정해야합니다. 문자열은 내부적으로 UTF-16으로 저장되므로 이것이 의미있는 유일한 인코딩입니다. 다른 인코딩으로 데이터를 저장하려면 대신 바이트 배열을 사용합니다.

SQL Server는 유사한 원리로 작동합니다. 열에 전달 된 모든 문자열 xml은 UTF-16으로 인코딩되어야합니다. SQL Server는 XML 선언이 UTF-16을 지정하지 않는 모든 문자열을 거부합니다. XML 선언이 없으면 XML 표준에 따라 기본값이 UTF-8로 설정되어 있으므로 SQL Server에서도이를 거부합니다.

이를 염두에두고 변환을 수행하는 몇 가지 유틸리티 방법이 있습니다.

public static string Serialize<T>(T value) {

    if(value == null) {
        return null;
    }

    XmlSerializer serializer = new XmlSerializer(typeof(T));

    XmlWriterSettings settings = new XmlWriterSettings()
    {
        Encoding = new UnicodeEncoding(false, false), // no BOM in a .NET string
        Indent = false,
        OmitXmlDeclaration = false
    };

    using(StringWriter textWriter = new StringWriter()) {
        using(XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings)) {
            serializer.Serialize(xmlWriter, value);
        }
        return textWriter.ToString();
    }
}

public static T Deserialize<T>(string xml) {

    if(string.IsNullOrEmpty(xml)) {
        return default(T);
    }

    XmlSerializer serializer = new XmlSerializer(typeof(T));

    XmlReaderSettings settings = new XmlReaderSettings();
    // No settings need modifying here

    using(StringReader textReader = new StringReader(xml)) {
        using(XmlReader xmlReader = XmlReader.Create(textReader, settings)) {
            return (T) serializer.Deserialize(xmlReader);
        }
    }
}

질문 추가를 참조하십시오. 내 테스트 결과를 이해하지 못합니다 . DB가 항상 UTF-16을 원 / 취득 / 필요하다는 귀하의 진술과 모순되는 것 같습니다 .
StampedeXV

9
당신은 하지 않는 UTF-16 인코딩에있다 -하지만 당신은 확인해야 그 당신이 일치 무엇을 사용 인코딩 StringWriter이 기대합니다. 내 대답을 참조하십시오. 내부 저장 형식은 여기서 관련이 없습니다.
Jon Skeet

알겠습니다. 나의 새로운 예에서 : 인코딩을 완전히 남겨 두는 것은 DB가 어떤 인코딩이 사용되었는지 스스로 결정하도록 만들었습니다. 이것이 작동하는 이유입니다. 이제 이해가 되나요?
StampedeXV

1
@SteveC : 죄송합니다, 제 실수입니다. Nothing암시 적으로 모든 유형으로 변환 할 수 있는 VB에서 코드를 직접 변환했습니다. Deserialize코드를 수정했습니다 . Serialize경고는 ReSharper에서-유일한 것은, 반대하지 않는 그 자체 컴파일러 있어야하며 할 합법적이다.
Christian Hayter

1
Jon Skeet의 의견을 확장하면 UTF-16이 필요하지 않습니다. 이를 보여주는 구체적인 예는 stackoverflow.com/a/8998183/751158 을 참조하십시오 .
ziesemer 2013-08-05

20

우선, 오래된 사례를 찾아야합니다. XmlTextWriter.NET 2.0에서 더 이상 사용되지 않는 을 사용 하는 것을 찾았습니다 . XmlWriter.Create대신 사용해야합니다.

다음은 객체를 XML 열로 직렬화하는 예입니다.

public void SerializeToXmlColumn(object obj)
{
    using (var outputStream = new MemoryStream())
    {
        using (var writer = XmlWriter.Create(outputStream))
        {
            var serializer = new XmlSerializer(obj.GetType());
            serializer.Serialize(writer, obj);
        }

        outputStream.Position = 0;
        using (var conn = new SqlConnection(Settings.Default.ConnectionString))
        {
            conn.Open();

            const string INSERT_COMMAND = @"INSERT INTO XmlStore (Data) VALUES (@Data)";
            using (var cmd = new SqlCommand(INSERT_COMMAND, conn))
            {
                using (var reader = XmlReader.Create(outputStream))
                {
                    var xml = new SqlXml(reader);

                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@Data", xml);
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
}

2
한 번만 투표 할 수 있지만 여기에서 최고의 답변이 될 자격이 있습니다. 결국,에서 XmlReader파싱 ​​할 수있는 한 어떤 인코딩이 선언되거나 사용되는지는 중요하지 않습니다 . 데이터베이스로 미리 파싱 된 후 DB는 UTF-16 등의 문자 인코딩에 대해 알 필요가 없습니다. 특히 XML 선언은 삽입하는 데 사용되는 방법에 관계없이 데이터베이스의 데이터와 함께 유지되지 않습니다. 여기와 다른 곳의 다른 답변에서 볼 수 있듯이 추가 변환을 통해 XML을 실행하여 낭비하지 마십시오.
ziesemer 2012 년

1
public static T DeserializeFromXml<T>(string xml)
{
    T result;
    XmlSerializerFactory serializerFactory = new XmlSerializerFactory();
    XmlSerializer serializer =serializerFactory.CreateSerializer(typeof(T));

    using (StringReader sr3 = new StringReader(xml))
    {
        XmlReaderSettings settings = new XmlReaderSettings()
        {
            CheckCharacters = false // default value is true;
        };

        using (XmlReader xr3 = XmlTextReader.Create(sr3, settings))
        {
            result = (T)serializer.Deserialize(xr3);
        }
    }

    return result;
}

-1

다른 곳에서 다루었을 수도 있지만 XML 소스의 인코딩 줄을 'utf-16'으로 변경하면 XML을 SQL Server 'xml'데이터 형식에 삽입 할 수 있습니다.

using (DataSetTableAdapters.SQSTableAdapter tbl_SQS = new DataSetTableAdapters.SQSTableAdapter())
{
    try
    {
        bodyXML = @"<?xml version="1.0" encoding="UTF-8" standalone="yes"?><test></test>";
        bodyXMLutf16 = bodyXML.Replace("UTF-8", "UTF-16");
        tbl_SQS.Insert(messageID, receiptHandle, md5OfBody, bodyXMLutf16, sourceType);
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
        Console.WriteLine(ex.Message);
        Console.ReadLine();
    }
}

결과는 모든 XML 텍스트가 'xml'데이터 유형 필드에 삽입되지만 'header'행은 제거됩니다. 결과 기록에서 보는 것은

<test></test>

"Answered"항목에 설명 된 직렬화 방법을 사용하는 것은 대상 필드에 원래 헤더를 포함하는 방법이지만 결과적으로 나머지 XML 텍스트는 XML <string></string>태그로 묶입니다 .

코드의 테이블 어댑터는 Visual Studio 2013 "새 데이터 원본 추가 : 마법사를 사용하여 자동으로 빌드 된 클래스입니다. Insert 메서드에 대한 5 개의 매개 변수는 SQL Server 테이블의 필드에 매핑됩니다.


2
바꾸다? 이것은 재밌습니다.
mgilberties

2
진지하게-이러지 마세요. 이제까지. "UTF-8"을 언급 한 내 XML에 산문을 포함하려면 어떻게해야하나요? 내 데이터를 내가 말하지 않은 것으로 변경 한 것입니다!
Tim Abell

2
코드의 실수를 지적 해 주셔서 감사합니다. bodyXML.Replace ( "UTF-8", "UTF-16") 대신 UTF-8을 UTF-16으로 변경하는 XML 헤더에 초점을 맞춘 코드가 있어야합니다. 내가 정말로 지적하고자하는 것은 소스 XML의 헤더를 이렇게 변경 한 다음 XML 데이터 유형 필드를 사용하여 XML의 본문을 SQL 테이블 레코드에 삽입하고 헤더를 제거하는 것입니다. 내가 지금 (4 년 전!) 기억하지 못하는 이유로 그 결과는 그 당시에 유용했습니다. 그리고 예, '교체'를 사용하는 멍청한 실수. 발생합니다.
DLG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.