2012年11月13日火曜日

文字エンコーディングを指定してファイルを開く

テキストファイルを各種文字エンコーディングで開いてみます。
文字エンコーディングを指定してテキストファイルを読み込むには、 File.ReadAllText の第二引数に Encoding を指定します。
サンプルでは、UTF8のテキストファイルを開いています。UTF8で開いたときは正しく表示できていますが、その他の文字エンコーディングで開いたときは、文字化けしています。
Shift_JIS
EUC-JP
UTF-8
UTF-16

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="250" Width="325">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Menu Grid.Row="0">
            <MenuItem Header="開く" Click="MenuItem_Click">
                <MenuItem Header="Shift_JIS" />
                <MenuItem Header="EUC-JP" />
                <MenuItem Header="UTF-8" />
                <MenuItem Header="UTF-16" />
                <MenuItem Header="UTF-16BE" />
                <MenuItem Header="UTF-32" />
                <MenuItem Header="UTF-32BE" />
            </MenuItem>
        </Menu>
        <TextBox Grid.Row="1" Name="textBox1"
                 AcceptsReturn="True"
                 ScrollViewer.VerticalScrollBarVisibility="Auto"
                 ScrollViewer.HorizontalScrollBarVisibility="Auto" />
    </Grid>
</Window>

MainWindow.xaml.cs

using Microsoft.Win32;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == true)
            {
                MenuItem clickedMenuItem = (MenuItem)e.OriginalSource;
                string encodingName = clickedMenuItem.Header as string;
                Encoding encoding = Encoding.GetEncoding(encodingName);

                string content = File.ReadAllText(ofd.FileName, encoding);
                this.textBox1.Text = content;
            }
        }
    }
}

0 件のコメント:

コメントを投稿