Kodlama sorunları

Kodlamayla ilgili büyük bir sorunum var. Kullandığım kod çalışmalı, ama değil!

İşte kod:

FileStream fs = new FileStream(saveFile, FileMode.Create, FileAccess.Write, FileShare.None);

System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(fs , Encoding.Unicode);
string textLine;
if (System.IO.File.Exists(readFile) == true)
{
    System.IO.StreamReader objReader;
    objReader = new System.IO.StreamReader(readFile, Encoding.Unicode);

    do 
    {
        textLine = objReader.ReadLine();
        if (textLine.IndexOf(searchString) != -1)
        {
            tempString = textLine;
            position1 = textLine.IndexOf(searchString);

            tempString = textLine.Substring(position1);
            if (tempString.IndexOf("(") != -1)
            {
                position2 = tempString.IndexOf("(");
                //MessageBox.Show(tempString.Length.ToString());
                tempString = tempString.Substring(0, position2);
            }
        }

        objWriter.WriteLine(textLine);
    } while (objReader.Peek() != -1);
}
objWriter.Close();
MessageBox.Show(tempString);
MessageBox.Show("Done!");

Karışık İngilizce karakterleri ve bazı Kiril karakterleri olan bir dosyayı okumalıyım, fakat dosyayı okuduktan ve işledikten sonra, dosyayı yeni bir konuma kaydetmeye çalıştığımda tüm semboller "?" veya başka bir bilinmeyen sembol. Her olası kodlamayı denedim ve işe yaramıyor!

0
Okuduğunuz giriş dosyasının Unicode ile kodlandığından emin misiniz?
katma yazar Darin Dimitrov, kaynak
Bize bu hekim veya beklentiniz için metin gösterebilir miyiz?
katma yazar Jodrell, kaynak
Bunların 140'ını gerçekten denedin mi? Dosya içeriğini gösteren bir hex görüntüleyicinin ekran görüntüsünü gönderin.
katma yazar Hans Passant, kaynak
msdn.microsoft.com/en-us/library/ & hellip; 'Bu özellik tarafından döndürülen UnicodeEncoding nesnesi, uygulamanız için uygun davranışa sahip olmayabilir. Kodlayamayacağı her dizeyi değiştirmek için yedek geri dönüşümü kullanır ve her bayt bir soru işareti ("?") Karakteri ile kod çözemez. '
katma yazar jv42, kaynak
Hayır emin değilim ama diğer tüm kodlamaları da test ettim ve sonuç aynı.
katma yazar Jordan, kaynak
Cyrilic için olanlar 140 değil ve evet tüm cyrilic test ettim. HEX görünümü:
katma yazar Jordan, kaynak
61 73 64 61 E4 E4 E4 F1 E4 E0 F1 E4 E0 F1 E4 0D 0A F4 F1 E4 0D 0A F4 E4 0D 0A E3 F4 E4 0D 0A E3 E4 0D 0A F4 E3 0D 0A F4 F5 0D 0A E3 F4 F5 0D 0A E3 E9 0D 0A 0D 0A F5 E9 EA E9 0D 0A 3B EB 0D 0A E5 F0 0D 0A E2 E5 F0 0D 0A 20 E2 0D 0A F0 0D 0A E5 E2 20 E4 F4 E3 20 E4 0D 0A F4 E3 E4 0D 0A F4 E3 20 0D 0A E4 E3 E4 0D 0A F4 E3 20
katma yazar Jordan, kaynak
л ер вер в р ев дфг д фгд фг дгд фг; asdaддасдасдасд фсд фд гфд гд фг фх гфх гй хйкй: Metin bu o ... gibrish olduğunu
katma yazar Jordan, kaynak

2 cevap

Göndermiş olduğunuz örnekte, dosyanın bir BOM'si yokmuş gibi görünmesine karşın, yine de karakterde kiril alfabesi karakterleri var. Bir BOM olmadan StreamReader , doğru kodlamayı tahmin edemez . Bu nedenle, dosyada kireçli karakterler bulunduğundan (HEX'e göre) Windows-1251 kodlaması var. yorum bölümünde göstermiş olduğunuz dökümü).

İşte deneyebileceğiniz şeyler:

using (var reader = new StreamReader("input.txt", Encoding.GetEncoding("Windows-1251")))
using (var writer = new StreamWriter("output.txt", false, Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
       //reading the input file line by line ...
       //perform the parsing and write to the UTF-8 output encoded file
        writer.WriteLine(line);
    }
}
3
katma
Çalışıyor! ÇOK TEŞEKKÜRLER!
katma yazar Jordan, kaynak

Giriş dosyanızın kodlamasından emin değilseniz, bunu belirtmeyin, StreamReader uygulamasının incelenmesine izin verin.

Kaynak dosyanızın Unicode değil, yerel Windows Encoding'inizi kullandığından şüpheleniyorum.

Tamamen yeni bir dosya oluşturun ve okuyucuda herhangi bir kodlama belirtmeyin.

objReader = new System.IO.StreamReader(readFile); 
1
katma
Belki de kaynak dosyanızın bir BOM'si var, ancak içerik UTF değil mi?!? Kaynak dosya ne kodlama? Not Defteri ile tamamen yeni bir dosya oluşturursanız ve herhangi bir kodlama belirtmezseniz, çalışması gerekir.
katma yazar Jodrell, kaynak
@Hans Passant, düzeltildi.
katma yazar Jodrell, kaynak
FileStream bir kodlamada asla tahmin etmez, sadece baytlarla çalışır.
katma yazar Hans Passant, kaynak
Bunu başlangıçta yaptım, ama işe yaramadığı için kodlamayı denedim ve mümkün olan her standart kodlamayı ve mümkün olan her türlü cıvık şifrelemeyi test ettim ve sonuç aynıydı. Ve ne olduğu hakkında hiçbir fikrim yok.
katma yazar Jordan, kaynak
Bunu test etmek için yeni bir dosya yaptım ve işe yaramıyor.
katma yazar Jordan, kaynak