Кодировать XML в iso-8859-15 в обычный текст в Utf8, а затем декодировать обратно - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть xmlDocument в iso-8859-15 для определенных символов португальского языка. Мне нужно закодировать xml в обычный текст в текстовый файл, который я буду загружать на удаленный сервер.

Затем мне нужно скачать файл и вернуть его в Xml, не теряя своих специальных символов.

Я пытался с кодировкой base64, но я всегда теряю символы, даже когда я указываю кодировку.

Encoding encoding = Encoding.GetEncoding("ISO-8859-15");
string _decrypted =    GlobalProcedures.base64Decode(Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText(GlobalVariables.SpiroStockManagmentDatabaseProcedures.XmlDatabaseFilePath + "encrypted2", encoding));

Xml выглядит так:

<?xml version="1.0" encoding="iso-8859-15"?>
<InventoryList>
  <Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Id>2</Id>
    <Name>Pão Hamburger Bimbo C/sésamo</Name>
    <Price>1.38</Price>
    <VariableWeightPrice>6,27/kg</VariableWeightPrice>
    <Brand>BIMBO</Brand>
    <PackageInfo>4UN 220GR</PackageInfo>
    <categoryString>Mercearia Salgada</categoryString>
    <PictureSmallFilename>2small.jpg</PictureSmallFilename>
    <InformationTakenFrom>Jumbo</InformationTakenFrom>
    <MarketItemUrl>http://www.jumbo.pt/Frontoffice/ContentPages/CatalogProduct.aspx?id=40733</MarketItemUrl>
    <BarCode>5601009920037</BarCode>
    <IsBlackListed>false</IsBlackListed>
    <InsertDate>2011-10-09T16:45:25</InsertDate>
    <QuantityIn>0</QuantityIn>
    <QuantityWeightIn>0</QuantityWeightIn>
    <QuantityOut>0</QuantityOut>
    <QuantityWeightOut>0</QuantityWeightOut>
    <History>
      <Item>
        <Quantity>1</Quantity>
        <QuantityWeight>0</QuantityWeight>
        <ListName>out</ListName>
        <InsertDate>2011-11-08T07:57:45</InsertDate>
      </Item>
      <Item>
        <Quantity>1</Quantity>
        <QuantityWeight>0</QuantityWeight>
        <ListName>in</ListName>
        <InsertDate>2011-12-06T23:09:21</InsertDate>
      </Item>
    </History>
  </Product>
</InventoryList>

Возможно ли это? Спасибо

отредактировано (вот код):

//read and encrypt
            string _encrypted2 = GlobalProcedures.base64Encode((Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText(GlobalVariables.SpiroStockManagmentDatabaseProcedures.XmlDatabaseFilePath)));
            FileInfo fileInfo2 = new FileInfo(GlobalVariables.SpiroStockManagmentDatabaseProcedures.XmlDatabaseFilePath + "encrypted2");
            FileStream stream2 = fileInfo2.Open(FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        StreamWriter m_streamWriter2 = new StreamWriter(stream2, encoding);
        try
        {
            m_streamWriter2.Write(_encrypted2);
        }
        finally
        {
            m_streamWriter2.Close();
            stream2.Close();
        }

            //read and decrypt and right to other file
            string _decrypted = GlobalProcedures.base64Decode(Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText(GlobalVariables.SpiroStockManagmentDatabaseProcedures.XmlDatabaseFilePath + "encrypted2", encoding));
               GlobalVariables.SpiroStockManagmentDatabaseProcedures.LoadXmlDocumentFromString(_decrypted);

            FileInfo fileInfo2 = new FileInfo(GlobalVariables.SpiroStockManagmentDatabaseProcedures.XmlDatabaseFilePath + "decrypted2");
            FileStream stream2 = fileInfo2.Open(FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            StreamWriter m_streamWriter2 = new StreamWriter(stream2, encoding);
            try
            {
                m_streamWriter2.Write(_decrypted);
            }
            finally
            {
                m_streamWriter2.Close();
                stream22.Close();
            }

А вот код для кодирования в base64

static public string base64Encode(string data)
    {
        try
        {
            byte[] encData_byte = new byte[data.Length];
            encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
            string encodedData = Convert.ToBase64String(encData_byte);
            return encodedData;
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Encode" + e.Message);
        }
    }

    static public string base64Decode(string data)
    {
        try
        {
            System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
            System.Text.Decoder utf8Decode = encoder.GetDecoder();

            byte[] todecode_byte = Convert.FromBase64String(data);
            int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
            char[] decoded_char = new char[charCount];
            utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
            string result = new String(decoded_char);
            return result;
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Decode" + e.Message);
        }
    }

отредактировано:

Благодарю за внимание. Дуглас. Я не могу удалить кодировку = "iso-8859-15" из XML-файла. Потому что я использую сериализацию XML. А без этого португальские специфические символы исчезают. -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...