2010-11-11 13 views
6

jakie jest wewnętrzne kodowanie z aplikacji .NET? (Na przykład obiekty ciągów) Czy mogę zdefiniować, jakie kodowanie zastosować powinno? Jeśli napiszę ciąg .net do pliku. Jakie kodowanie ma ciąg?.NET wewnętrzne kodowanie

// edit

Dim test as String="Das ist ein Test" <---what Encoding has this String? 

Dim reader as New IO.StreamReader(docPath, _ 
    System.Text.Encoding.GetEncoding("shift-jis")) 

test=reader.ReadToEnd() <---and now? What Encoding has this String? 

Dziękujemy!

Odpowiedz

5
Dim test as String="Das ist ein Test" <---what Encoding has this String? 

UTF-16

Dim reader as New IO.StreamReader(docPath, 
    System.Text.Encoding.GetEncoding("shift-jis")) 
test=reader.ReadToEnd <---and now? What Encoding has this String? 

Wciąż UTF-16. Klasa StreamReader sprawdza bajty w docPath i konwertuje je na UTF-16 w oparciu o kodowanie shift-jis.

+0

+1 do bezpośredniego przejrzenia kodu OP i informacji o StreamReaderze. –

1

Wewnętrznie .NET używa Unicode - ZAKTUALIZOWANY - UTF-16.

Jednakże, jeśli zapisujesz ciąg do pliku, musisz podać kodowanie. Jeśli nie .NET wybierze kodowanie dla ciebie - zwykle jest to UTF8. Oto reflectored File.WriteAllText:

public static void WriteAllText(string path, string contents) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    if (path.Length == 0) 
    { 
     throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath")); 
    } 
    InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 
+1

W rzeczywistości jest to 2 bajty na kod, a nie na znak. Rzeczy takie jak znaki akcentujące mogą być oddzielnymi punktami kodowymi, ale drukowane jako część tego samego znaku. Ponadto używa UTF-16, co oznacza, że ​​punkt kodowy może * potencjalnie * być 4 bajtami, chociaż nikt w praktyce nie używa niczego poza podstawową płaszczyzną wielojęzyczną. –

+0

W rzeczywistości jest to 2 bajty na jednostkę kodu, a nie punkt kodowy :-) Punkty kodu powyżej U + FFFF wymagają 2 jednostek kodowych w UTF-16 (i .NET użytkownika UTF-16). –

3

System.String jest UTF-16. Możesz przekonwertować to na różne inne kodowania przy użyciu pochodnych klasy System.Text.Encoding.

W odpowiedzi na edycję: System.IO.StreamReader, o ile wiem, próbuje "zgadnąć" co do właściwego kodowania, jeśli nie jest określone. System.IO.StreamWriter pisze jako UTF-8, IIRC. Jestem mniej zaznajomiony z tymi klasami, więc weź te informacje na własne ryzyko;)

2

Jak wszystkie inne odpowiedzi: tak, 2 bajty Unicode (UTF-16). I tak, możesz kontrolować, jak zapisuje na płytę, jak to opisał @Billy ONeal.

W związku z pytaniem, czy można to kontrolować: Nie, nie jest to możliwe. .NET zawsze będzie działał wewnętrznie na Unicode UTF-16. Brak ustawień dla tego.

+0

+1 z powodu braku zmienności System.String. –

+0

Dziękuję bardzo :). –