none
在独立存储中保存带有中文的xml文件的问题 RRS feed

  • 问题

  • 创建一个带有中文的xml文件保存到独立存储中默认为utf-8
    然后通过system.xm.xmreader.create(stream) 读取就报错。因为utf-8中无法保存中文

    将xml文件的编码改成gb2312保存到独立存储中
    然后同上system.xm.xmreader.create(stream) 读取还是报错, 系统部支持的字符编码

    请问。如何将带有中文的xml文件保存到独立存储中。 而保证能通过system.xm.xmreader.create(xml文件流) 读取到

    silverlight 2...


    .发现大家好多人在用silverlight 3了。我快赶不上时代了。
    2009年7月9日 1:57

答案

  • 你好,

    试下下面的代码:

     

     

    <StackPanel>

     

     

    <Button Width="100" Height="50" Content="Read" Click="Button_Click"></Button>

     

     

    <Button Width="100" Height="50" Content="Write" Click="Button_Click_1"></Button>

     

     

    <TextBlock x:Name="TextBlock1"></TextBlock>

     

     

    </StackPanel>

     

    public partial class Page : UserControl

    {

     

    public Page()

    {

    InitializeComponent();

    }

     

    private void Button_Click(object sender, RoutedEventArgs e)

    {

    //Read

     

    try

    {

     

    using (IsolatedStorageFile isoStore =

     

    IsolatedStorageFile.GetUserStoreForApplication())

    {

     

    using (IsolatedStorageFileStream isoStream =

     

    new IsolatedStorageFileStream("IsoStoreFile.txt",

     

    FileMode.Open, isoStore))

    {

     

    using (StreamReader reader = new StreamReader(isoStream))

    {

     

    this.TextBlock1.Text = reader.ReadToEnd();

    }

     

    }

    }

    }

     

    catch (Exception ex) {

     

    HtmlPage.Window.Alert(ex.Message);

    }

    }

     

    private void Button_Click_1(object sender, RoutedEventArgs e)

    {

    //Write

     

    using (IsolatedStorageFile isoStore =

     

    IsolatedStorageFile.GetUserStoreForApplication())

    {

     

    using (IsolatedStorageFileStream isoStream =

     

    new IsolatedStorageFileStream("IsoStoreFile.txt",

     

    FileMode.Create, isoStore))

    {

     

    using (StreamWriter writer = new StreamWriter(isoStream))

    {

    writer.Write(

     

    string.Format("<元素>内容</元素><时间>{0}</时间>",

     

    DateTime.Now.ToString()));

    }

    }

    }

    }

    }

    2009年7月10日 2:59
    版主
  •                 using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        IsolatedStorageFileStream IsolatedFile = store.CreateFile("sale.xml");
                        byte[] buffer = new byte[e.Result.Length];
                        e.Result.Read(buffer, 0, Convert.ToInt32(e.Result.Length));
                        IsolatedFile.Write(buffer, 0, buffer.Length);
                        IsolatedFile.Close();
                    }
                    //这里读取流
                    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        if (store.FileExists("sale.xml"))
                        {
                            byte[] buffer2;
                            using (IsolatedStorageFileStream fs = store.OpenFile("sale.xml", System.IO.FileMode.Open))
                            {
                                buffer2 = new byte[fs.Length];
                                fs.Read(buffer2, 0, Convert.ToInt32(fs.Length));
                            }
                            Stream stream = new MemoryStream(buffer2);
                            ReadXml(stream);
                        }
                        else
                        {
                            ReadXml(e.Result);
                        }
                    }
    测了,中文也完全没有问题的,检查程序逻辑是否有错误
    2009年7月11日 1:50
    版主

全部回复

  • 你好,

    试下下面的代码:

     

     

    <StackPanel>

     

     

    <Button Width="100" Height="50" Content="Read" Click="Button_Click"></Button>

     

     

    <Button Width="100" Height="50" Content="Write" Click="Button_Click_1"></Button>

     

     

    <TextBlock x:Name="TextBlock1"></TextBlock>

     

     

    </StackPanel>

     

    public partial class Page : UserControl

    {

     

    public Page()

    {

    InitializeComponent();

    }

     

    private void Button_Click(object sender, RoutedEventArgs e)

    {

    //Read

     

    try

    {

     

    using (IsolatedStorageFile isoStore =

     

    IsolatedStorageFile.GetUserStoreForApplication())

    {

     

    using (IsolatedStorageFileStream isoStream =

     

    new IsolatedStorageFileStream("IsoStoreFile.txt",

     

    FileMode.Open, isoStore))

    {

     

    using (StreamReader reader = new StreamReader(isoStream))

    {

     

    this.TextBlock1.Text = reader.ReadToEnd();

    }

     

    }

    }

    }

     

    catch (Exception ex) {

     

    HtmlPage.Window.Alert(ex.Message);

    }

    }

     

    private void Button_Click_1(object sender, RoutedEventArgs e)

    {

    //Write

     

    using (IsolatedStorageFile isoStore =

     

    IsolatedStorageFile.GetUserStoreForApplication())

    {

     

    using (IsolatedStorageFileStream isoStream =

     

    new IsolatedStorageFileStream("IsoStoreFile.txt",

     

    FileMode.Create, isoStore))

    {

     

    using (StreamWriter writer = new StreamWriter(isoStream))

    {

    writer.Write(

     

    string.Format("<元素>内容</元素><时间>{0}</时间>",

     

    DateTime.Now.ToString()));

    }

    }

    }

    }

    }

    2009年7月10日 2:59
    版主
  •                 using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        IsolatedStorageFileStream IsolatedFile = store.CreateFile("sale.xml");
                        byte[] buffer = new byte[e.Result.Length];
                        e.Result.Read(buffer, 0, Convert.ToInt32(e.Result.Length));
                        IsolatedFile.Write(buffer, 0, buffer.Length);
                        IsolatedFile.Close();
                    }
                    //这里读取流
                    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        if (store.FileExists("sale.xml"))
                        {
                            byte[] buffer2;
                            using (IsolatedStorageFileStream fs = store.OpenFile("sale.xml", System.IO.FileMode.Open))
                            {
                                buffer2 = new byte[fs.Length];
                                fs.Read(buffer2, 0, Convert.ToInt32(fs.Length));
                            }
                            Stream stream = new MemoryStream(buffer2);
                            ReadXml(stream);
                        }
                        else
                        {
                            ReadXml(e.Result);
                        }
                    }
    测了,中文也完全没有问题的,检查程序逻辑是否有错误
    2009年7月11日 1:50
    版主