BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki
asilaczuk
asilaczuk
0 pkt.
Nowicjusz

 
0


Witam,

 

Mam za zadanie stworzyc plik zawierajacy dane w formacie ANSI.

Ponizej przedstawiam kawalek kodu ktory tworzy plik.

Problem w tym ze pomimo uzywania roznych stron kodowych 1250 lub 1252 wciaz otrzymuje plik w formacie UTF-8.

 

using (var stream = newStreamWriter(tempFilePath, false, Encoding.GetEncoding(1252)))

{

     stream.Write(content);

}

 

Czy ktos z Was spotkal sie z podobnym problem i mogly rzucic troche swiatla na temat.

Moze problem lezy w tym ze nie mam zainstalowanej tej strony kodowej, moze ktos wie jak to sprawdzic.

 

Pozdrawiam

 

Andrzej







PaSkol Ekspert WSS
PaSkol
628 pkt.
Senior
 
0


U mnie działa, tylko stronę kodową zmieniłem. Poniżej kod:

 

public void Test()
{
	string s = "Zażółć gęślą jaźń";
	using (var stream = new StreamWriter(@"d:\temp\out.bin", false, Encoding.GetEncoding(1250)))
	{
		stream.Write(s);
	}
}

a w pliku hexadecymalnie wygląda to tak:

 

5A 61 BF F3 B3 E6 20 67 EA 9C 6C B9 20 6A 61 9F F1

 

co daje jednobajtowy tekst ANSI (w kodowaniu Windows-PL)


Edytowano 2 razy. Ostatnio 2012-06-11 11:07:21 przez PaSkol.
asilaczuk
asilaczuk
0 pkt.
Nowicjusz
 
0


Dzieki Paskol za sprawdzenie.

U mnie niestety nie dziala.

Wiesz moze jak sprawdzic czy mam zainstalowana strone kodowa ANSI ?

Pracuje na Windows 7.


PaSkol Ekspert WSS
PaSkol
628 pkt.
Senior
 
0


Jeśli masz Win7 PL to masz tę stronę kodową, poza tym, wydaje mi się, że to nie ma znaczenia, czy jest ona zainstalowana czy nie. To po prostu ma działać, bo inaczej byłby przymus instalowania wszystkich stron, do których chce się zapisywać Unicode.

 

Czy testował(eś/aś) mój kod? Czy nadal swój? Nie bardzo wiem co to jest content, jakiego jest typu. Przydałby się wygenerowany przez Ciebie plik (najlepiej wg mojego przykładu). Skąd pewność, że jest w UTF-8?


Marcin Iwanowski Redaktor
Marcin Iwanowski
2605 pkt.
Guru
MVP
 
0


Pytanie skąd wiesz że Twój plik nie jest w ANSI?

Btw. Używajcie Encoding.Default


Pozdrawiam,

Marcin Iwanowski

Microsoft Most Valuable Professional | Microsoft Certified Trainer

 

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

PaSkol Ekspert WSS
PaSkol
628 pkt.
Senior
 
0


Używajcie Encoding.Default

Należałoby dodać: jeżeli chcecie zapisać w domyślnej stronie kodowej waszej wersji językowej Windows. Mogę przecież chcieć zapisać w stronie kodowej dla Europy Zachodniej (ANSI dla West Europe) - tak jak założyciel tego wątku, mogę też chcieć zapisać w stronie kodowej LATIN II, która jest używana przez okno poleceń MS-DOS (strona kodowa 852)

using (var stream = new StreamWriter(@"d:\852.txt", false, Encoding.GetEncoding(852)))
{
	stream.Write(s);
}

tak żeby polecenie "type 852.txt" użyte w oknie MS-DOS pokazało prawidłowe polskie znaki - co nie będzie miało miejsca dla pliku zapisanego w Encoding.Default.


Marcin Iwanowski Redaktor
Marcin Iwanowski
2605 pkt.
Guru
MVP
 
0


Wszystko się zgadza, ale powtórzę się używajcie Encoding.Default.


Pozdrawiam,

Marcin Iwanowski

Microsoft Most Valuable Professional | Microsoft Certified Trainer

 

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

Adam Dudzik
Adam Dudzik
800 pkt.
Senior
 
0


Rozwiniesz? Kiedy powinniśmy używać Encoding.Default?

Bo nie rozumiem dlaczego chcąc utworzyć plik w _określonym_ kodowaniu mam się zdawać na to co sobie _ustawi_ użytkownik.


Marcin Iwanowski Redaktor
Marcin Iwanowski
2605 pkt.
Guru
MVP
 
0


Jeżeli chcesz stworzyć w określonym kodowaniu to wtedy używasz kodu takiego jak powyżej koledzy pisali. Jednakże Default powinieneś używać wtedy jak chcesz stworzyć plik, który zostanie później przez tego samego użytkownika otwierany (nie z poziomu Twojej aplikacji, a po prostu z systemu Windows).

Dodatkowo zwróć uwagę na przypadek kiedy odczytujesz plik z dysku, jeżeli ten plik (np. tekstowy) został stworzony wcześniej przez użytkownika z poziomu np. zwykłego notatnika to będzie on właśnie zakodowany encodingiem który masz w Default - a niestety nazwa Default jest myląca bo gdy otwieramy plik to .NET domyślnie otwiera pliki z użyciem kodowania UTF.


Pozdrawiam,

Marcin Iwanowski

Microsoft Most Valuable Professional | Microsoft Certified Trainer

 

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

Adam Dudzik
Adam Dudzik
800 pkt.
Senior
 
1


A to ok. Myślałem że jakieś inne zagwozdki o których nie wiem. Tak sformułowana odpowiedź wyjaśnia temat.


Udziel odpowiedzi

pkt.
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.