DGKumar Ответов: 2

Как получить специальные символы в C# с помощью memorystream.


I want to get the string data with special characters like below.

Á,õn O'kim José Nuñez    
JOSNUÑ44

but the special characters are missing while get back by using the below logic.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpecialCharacters
{
    class Program
    {
        static void Main(string[] args)
        {
           
            string specialcharactersdata = @"Á,õn O'kim José Nuñez JOSNUÑ44  ";
            Console.WriteLine(specialcharactersdata);


            using (MemoryStream ms = new MemoryStream(System.Text.ASCIIEncoding.UTF8.GetBytes(specialcharactersdata)))
            {
                StreamWriter sw = new StreamWriter(ms);
                sw.Flush();
                ms.Position = 0;
                StreamReader sr = new StreamReader(ms);
                string myStr = sr.ReadToEnd();
              
                Console.WriteLine(myStr);
                Console.Read();
            }


        }
    }
}



Could you please help me how to get exact text or string with special characters.
Á,õn O'kim José Nuñez JOSNUÑ44


Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpecialCharacters
{
    class Program
    {
        static void Main(string[] args)
        {
           
            string specialcharactersdata = @"Á,õn O'kim José Nuñez JOSNUÑ44  ";
            Console.WriteLine(specialcharactersdata);


            using (MemoryStream ms = new MemoryStream(System.Text.ASCIIEncoding.UTF8.GetBytes(specialcharactersdata)))
            {
                StreamWriter sw = new StreamWriter(ms);
                sw.Flush();
                ms.Position = 0;
                StreamReader sr = new StreamReader(ms);
                string myStr = sr.ReadToEnd();
              
                Console.WriteLine(myStr);
                Console.Read();
            }


        }
    }
}

выходим ставим как ниже:
A,on O'kim José Nuñez JOSNUÑ44
A,on O'kim José Nuñez JOSNUÑ44



Но я хочу поставить как ниже:
Á,õn O'kim José Nuñez    
JOSNUÑ44

2 Ответов

Рейтинг:
2

Richard Deeming

По умолчанию консоль не поддерживает символы UTF8 / Unicode; она поддерживает только символы текущей кодовой страницы.

В зависимости от вашей операционной системы, вы вероятно будьте в состоянии исправить это, установив то Console.OutputEncoding собственность[^] к System.Text.Encoding.UTF8 прежде чем писать значения. Для некоторых символов также может потребоваться установить дополнительные шрифты и изменить шрифт консоли.

c# - Как записать символы Юникода в консоль? - переполнение стека[^]


CPallini

5.

DGKumar

Привет Рич,
1. я перешел к этому коду в приложение MVC4 и пытаюсь добавить заголовок к нижеприведенному коду
TransferUtilityUploadRequest uploadRequest = новый TransferUtilityUploadRequest();
uploadRequest.BucketName = sourceBucketName.ConfigValue.Метод toString();
uploadRequest.Ключ = имя файла;

TmpStream поток = новый потоке MemoryStream(системы.Текст.Кодирование.Кодировке utf8.GetBytes(downloadData));
tmpStream.Seek(0, SeekOrigin.Begin);
StreamReader sReaderData = новый StreamReader(tmpStream);

Нужно добавить этот заголовок в этот uploadRequest.Заголовки.ContentEncoding = Кодирование.Юникод;
но получение экскрементов
Если я добавлю этот заголовок, то данные должны отображаться в моем файле excel.

Рейтинг:
0

Rob Philpott

Это потому, что ни один из этих символов не существует в кодировке ASCII.

Попробуйте вместо этого использовать UTF8!

-------------

Ладно - все еще в замешательстве. Я попробовал ваш код, и текст сохранился просто отлично. Специальные символы не будут проблемой, если вы не вернетесь к чему-то вроде ASCII. Я его слегка переписал:

string specialcharactersdata = @"Á,õn O'kim José Nuñez JOSNUÑ44  ";
Console.WriteLine(specialcharactersdata);
using (MemoryStream ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms);
    sw.WriteLine(specialcharactersdata);
    sw.Flush();
    ms.Position = 0;
    StreamReader sr = new StreamReader(ms);
    string myStr = sr.ReadToEnd();
    Console.WriteLine(myStr);
    Console.Read();
}


Что дает результат, который я ожидаю, который, кажется, согласуется с тем, что требуется в вашем последнем комментарии, но не с первоначальным вопросом.


DGKumar

Я использовал приведенный ниже код
используя (потоке MemoryStream МС = новая потоке MemoryStream(системы.Текст.Кодирование.Кодировке utf8.Метод getbytes(specialcharactersdata)))
но этот кодовый текст не отображает специальные символы
А,Ын О'Ким Хосе Нуньес

Rob Philpott

Извините, я думаю, что неправильно прочитал ваш пост. Но я не понимаю, что ты пытаешься сделать. Вы пытаетесь преобразовать "Á,YN O'Kim José Nuñez" в "JOSNUÑ44"? Я не вижу никакой связи между ними.

DGKumar

Á,ön O'Kim José Nuñez JOSNUÑ44 это полная строка

Rob Philpott

Дай мне минутку, я попробую...

DGKumar

У меня есть строка, как показано ниже
А,Ын О'Ким Хосе Нуньес

Мне нужно передать данные с помощью потока памяти, как показано ниже
используя (потоке MemoryStream МС = новая потоке MemoryStream(системы.Текст.Кодирование.Кодировке utf8.Метод getbytes(specialcharactersdata)))

если я использую это, я получаю пропущенную строку символов
как показано ниже

A,on O'Kim,но фактическая строка-это Á, ön O'Kim, которая изменяется после использования кода

DGKumar

Привет Роб,
Несмотря на то, что тот же текст, что я пробовал, также не отображается в окне вывода консоли.
Á,ynjosnuñ44