Переполнение буфера преобразования при сохранении обновленного XML в файл
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>
<Collection>
<Book Id='1' ISBN='1-100000ABC-200'>
<Title>Principle of Relativity</Title>
</Book>
</Collection>
Всякий раз, когда я хочу сохранить мой обновленный файл XML в каталоге приложения, который /data/data/App17.App17/files
возникает исключение, которое
System.ArgumentException: переполнение буфера преобразования.
Почему возникает это исключение и как я могу его решить?
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.IO;
using System.Reflection;
using Android.Content.Res;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace App17
{
[Activity(Label = "App17", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
int count = 1;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
var xml = XDocument.Load(Assets.Open("Q317664.xml"));
var node = xml.Descendants("Book").FirstOrDefault(cd => cd.Attribute("Id").Value == "1");
node.SetAttributeValue("ISBN", "new");
string dir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string path = Path.Combine(dir, "Q317664.xml");
xml.Save(path);
1 ответ
Решение
Проблема в том, что файл не закодирован в UTF-8. Я полагаю, вы создали его с Visual Studio > New File
, Это создает файл с кодовой страницей Windows или другой кодировкой.
Откройте файл в VS и сохраните его через File > Advanced Save Options
а затем выберите Unicode - Codepage 1200
,
После того, как вы это сделали, ваш код должен работать нормально.