Các ký tự nhất định trong bộ ký tự WE8ISO8859P1 có biểu diễn nhị phân khác với ký tự tương tự trong UTF8.
Những gì tôi đề xuất là 2 cách khả thi
1) Thử sử dụng các nhà cung cấp dữ liệu gốc Oracle cho .NET (ODP.NET). Có thể có một lỗi / tính năng trong thư viện System.Data.OracleClient của Microsoft khiến bộ điều hợp này không tự động hỗ trợ chuyển đổi WE8ISO8859P1 sang unicode. Đây là liên kết đến ODP.NET
Tôi hy vọng rằng sẽ có sự hỗ trợ cho mã hóa này trong ODP (nhưng nói thật là tôi chưa bao giờ kiểm tra điều này, đó chỉ là một gợi ý)
2) Cách giải quyết:trong Dataset, bạn nên tạo trường nhị phân (được ánh xạ tới trường bảng gốc) và trường Chuỗi (không được ánh xạ tới cơ sở dữ liệu). Khi bạn tải dữ liệu vào tập dữ liệu, hãy lặp lại cho từng hàng và chuyển đổi perfrom từ mảng nhị phân sang chuỗi.
Mã phải giống như thế này
Encoding e = Encoding.GetEncoding("iso-8859-1");
foreach(DataRow row in dataset.Tables["MyTable"])
{
if (!row.IsNull("MyByteArrayField"))
row["MyStringField"] = e.GetString((row["MyByteArrayField"] as byte[]));
}