2016-01-14 14 views
6

Mam prosty formularz HTML:kodowanie znaków w pliku HTML przesłać

<form action="/file/import" method="POST" enctype="multipart/form-data"> 
    <input id="csvFile" type="file" name="file"> 
</form> 

mam problem z przesłaniem plików CSV zapisywane z różnymi zestawami znaków. Czy można przekonwertować dowolny plik na UTF-8 i wysłać go w ten sposób na serwer?

Próbowałem kilka opcji i śledzone dane wysyłane przez przeglądarkę z ngrep, po wgraniu pliku pierwotnie zapisany w ISO-8859-2:

  1. Ustawianie enctype do multipart/form-data; charset=utf-8 -> To z jakiegoś Powód spowodował wysłanie przeglądarki Content-Type: application/x-www-form-urlencoded - podobnie jak nie udało się użyć mojego określonego entype.

  2. Dodanie do tagu form atrybutu: accept-charset="UTF-8" -> Brak efektu.

  3. Używanie <meta charset="UTF-8"> w <head> -> Bez efektu.

Myślę, że przesyłanie plików powinno działać w ten sposób. Nie chcę, aby mój serwer dbał o różne kodowania, ale raczej otrzymywał dane w standardowy sposób. Ale jeśli nie jest to możliwe, czy mogę jakoś przesłać informacje o kodowaniu z przeglądarki na serwer? Byłbym wdzięczny za każdą radę, dzięki.

Odpowiedz

0

Należy rozróżnić zawartość (bajty) i kodowanie (interpretacja bajtów). Funkcja przesyłania plików HTML przesyła bajty i nie dba o interpretację, ponieważ nie ogranicza się do plików tekstowych, ale może również przesyłać pliki binarne. Ponieważ twój serwer odbiera bajty, musi obsługiwać interpretację.

enctype=multipart/form-data; charset=utf-8 dodaje tylko informację nagłówkową o zestawie znaków, aby serwer mógł sobie z tym poradzić. Wywołuje konwersję przed lub po przesłaniu pliku.