2017-01-22 2 views
2

J'ai un problème avec FileOpenPicker. J'utilise des caractères spéciaux, par ex. et Sc mon ę Txt a contenu: « Ss Eo çç »FileOpenPicker - Comment lire les caractères spéciaux

Il est mon code:

var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List; 
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; 
picker.FileTypeFilter.Add(".txt"); 

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); 
if (file != null) 
{ 
    using (var inputStream = await file.OpenReadAsync()) 
    using (var classicStream = inputStream.AsStreamForRead()) 
    using (var streamReader = new StreamReader(classicStream)) 
    { 
     var something = streamReader.ReadToEnd(); 
    } 
} 

Et quand je lis mon dossier je reçois quelque chose comme ceci:

enter image description here

J'ai essayé la culture du changement, le codage et rien.

Comment est le problème avec cette classe?

J'apprécie vraiment toute aide ou des conseils à ce sujet. Merci!

+0

problème est peut-être dans votre fichier, tout d'abord ce que l'encodage est votre fichier texte? Ensuite, ouvrez StreamReader avec le même codage que vous n'avez pas spécifié explicitement. (Je recommande d'utiliser l'encodage UTF8) – kurakura88

Répondre

0

Le problème n'est pas avec la classe, mais avec l'encodage du fichier txt. Vous avez probablement défini l'encodage comme ANSI, ce qui vous donnera des caractères étranges si vous essayez de le lire avec votre code. Pour le faire correctement, vous devrez définir le certain codage avec le fournisseur enregistrement:

var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List; 
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; 
picker.FileTypeFilter.Add(".txt"); 
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); 
if (file != null) 
{ 
    // register provider - by default encoding is not supported 
    Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); 
    using (var inputStream = await file.OpenReadAsync()) 
    using (var classicStream = inputStream.AsStreamForRead()) 
    using (var streamReader = new StreamReader(classicStream, Encoding.GetEncoding(1250))) 
    { 
     var something = streamReader.ReadToEnd(); 
    } 
} 

il serait plus facile si vous aviez enregistré votre fichier avec l'encodage UTF-8, alors vous pourriez avoir lu juste tout de suite .

enter image description here