না, আপনি StringWriter
মধ্যবর্তী থেকে মুক্তি পেতে একটি ব্যবহার করতে পারেন MemoryStream
। তবে এটি XML এ জোর করার জন্য আপনাকে এমন একটি জিনিস ব্যবহার করতে হবে StringWriter
যা Encoding
সম্পত্তিটিকে ওভাররাইড করে :
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
অথবা আপনি যদি এখনও সি # 6 ব্যবহার করছেন না:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
তারপর:
var serializer = new XmlSerializer(typeof(SomeSerializableObject));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, entry);
utf8 = writer.ToString();
}
স্পষ্টতই আপনি Utf8StringWriter
আরও সাধারণ শ্রেণি তৈরি করতে পারেন যা এর নির্মাতায় যে কোনও এনকোডিং গ্রহণ করে - তবে আমার অভিজ্ঞতায় ইউটিএফ -8 হ'ল একেবারে সাধারণভাবে প্রয়োজনীয় একটি "কাস্টম" এনকোডিং StringWriter
:) এর জন্য :)
এখন জো হান্না যেমন বলেছেন, এটি অভ্যন্তরীণভাবে ইউটিএফ -১ 16 হবে, তবে সম্ভবত আপনি এটিকে বাইনারি ডেটাতে রূপান্তর করতে কোনও এক সময় এটি অন্য কোনও কিছুতে পাঠিয়ে যাচ্ছেন ... সেই সময়ে আপনি উপরের স্ট্রিংটি ব্যবহার করতে পারেন, এটিকে ইউটিএফ -8 বাইটে রূপান্তর করুন এবং সমস্ত কিছু ঠিকঠাক হবে - কারণ এক্সএমএল ঘোষণাটি "utf-8" কে এনকোডিং হিসাবে নির্দিষ্ট করবে।
সম্পাদনা: এই কাজটি দেখানোর জন্য একটি সংক্ষিপ্ত তবে সম্পূর্ণ উদাহরণ:
using System;
using System.Text;
using System.IO;
using System.Xml.Serialization;
public class Test
{
public int X { get; set; }
static void Main()
{
Test t = new Test();
var serializer = new XmlSerializer(typeof(Test));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, t);
utf8 = writer.ToString();
}
Console.WriteLine(utf8);
}
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
}
ফলাফল:
<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<X>0</X>
</Test>
"Utf-8" এর ঘোষিত এনকোডিংটি নোট করুন যা আমরা যা চেয়েছিলাম তা বিশ্বাস করি।