2011-10-11 43 views
7

Vấn đề của tôi là:Cách tạo đầu ra Stream.Write() theo định dạng UTF-8

Tôi đang tạo và tải lên tệp SQL bằng ASP.NET, nhưng sau khi tệp được lưu vào máy chủ FTP, các ký tự như ü được đổi thành &uul;, ø thành & oslash; và vân vân ... Làm sao tôi có thể ngăn điều này xảy ra? Tôi không muốn tệp được định dạng bằng mã ASCII, nhưng với UTF-8.

Các mã để tạo và tải lên các tập tin trông như thế này:

//request = the object to be made an request out of. 
Stream requestStream = request.GetReguestStream(); 
var encoding = new UTF8Encoding(); 
//fileContent is the string to be saved in the file 
byte[] buffer = encoding.GetBytes(fileContent); 
requestStream.Write(buffer, 0, buffer.Length); 
requestStream.Close(); 

Như bạn có thể thấy tôi đã cố gắng sử dụng System.Text.UTF8Encoding, nhưng nó không hoạt động.

+0

Opps, thứ hai có nghĩa vụ phải là & oslash; không có không gian. – linnkb

+0

Lỗi có thể ở bên nhận ... –

+0

Có nhiều khả năng là mặt FTP của sự việc gây ra vấn đề này hơn là với luồng văn bản. Nhưng bạn đã không hiển thị mã đó. –

Trả lời

1

Đặt nó trong gỡ lỗi và xem những gì được đưa vào 'bộ đệm' sau khi mã hóa.GetBytes() được gọi. Điều này sẽ xác minh nếu đó là phía rx gây ra nó.

9

Hãy nhớ rằng, với các luồng, bạn hầu như luôn có thể bao gồm các luồng khi cần thiết. Nếu bạn muốn viết UTF-8 mã hóa nội dung bạn quấn dòng yêu cầu trong một StreamWriter với mã hóa chính xác:

using (Stream requestStream = request.GetRequestStream()) 
using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8)) { 
    writer.Write(fileContent); 
} 

Vì bạn nói rằng bạn đang tải lên một dịch vụ web hãy chắc chắn để thiết lập mã hóa nội dung của bạn cũng . Vì bạn chưa đăng nơi đối tượng request xuất phát từ, tôi cho rằng đó là một thông thường HttpWebRequest.

Với HttpWebRequest, bạn sẽ cho máy chủ biết mã hóa nội dung là gì bằng cách sử dụng thuộc tính ContentType.

request.ContentType = "text/plain;charset=utf-8"; 

Như những người khác đã đề cập, mặc dù bản thân quá trình truyền FTP cũng có thể phá vỡ nó. Nếu bạn có thể, hãy đảm bảo nó được chuyển ở chế độ nhị phân, không phải chế độ ASCII.

Các vấn đề liên quan