2011-02-03 21 views
5

Tôi đang sử dụng .NET và tôi cần cắt bớt chuỗi có thể chứa các ký tự nhiều byte để ký tự không quá một độ dài được đặt sau khi URL được mã hóa . Điều này có vẻ như một cái gì đó sẽ được xây dựng trong, nhưng tôi không thể tìm thấy nó.Giới hạn độ dài của chuỗi được mã hóa bằng URL với các ký tự nhiều byte trong .NET

Tôi chỉ thực hiện chuỗi con khi URL được mã hóa, nhưng có thể mất một phần của ký tự được mã hóa (khoảng trống trở thành% 20 và nếu nó ở cuối nó có thể bị cắt bớt thành% 2, không hợp lệ), hoặc một phần của ký tự nhiều byte sẽ bị cắt ngắn (π được mã hóa dưới dạng% CF% 80 và có thể bị cắt ngắn dưới dạng%,% CF,% CF% 8, tất cả đều sai).

+0

Bạn có yêu cầu cách cắt ngắn chuỗi tại một độ dài nhất định hay bạn đang hỏi cách tự động thực hiện chuỗi đó? Câu trả lời cho câu hỏi đầu tiên là longString.Substring (0, maxLength). – Kendrick

+0

@Kendrick: Tôi nghĩ rằng câu hỏi là bạn không thực sự biết chuỗi dài sẽ ở dạng urlencoded của nó, cho đến khi bạn thực sự urlencode nó, vì một số ký tự trong ký tự gốc (còn gọi là multibyte) sẽ đòi hỏi nhiều hơn một byte trong phiên bản được mã hóa url. – MusiGenesis

+0

@MusiGenesis: Đúng vậy. Tôi đã cập nhật câu hỏi của mình để cụ thể hơn. – thefroatgt

Trả lời

1

Tìm kiếm Google nhanh chóng của tôi không bật lên bất kỳ điều gì, điều này hơi ngạc nhiên vì điều này có vẻ giống như một vấn đề tương đối phổ biến (ít nhất là đối với những người không tránh các URL dài khổng lồ). Bạn có thể làm điều này lặp đi lặp lại nơi bạn mã hóa chuỗi và nếu chuỗi được mã hóa quá dài, bạn đã cắt ký tự khỏi mã gốc và mã hóa lại và tiếp tục thực hiện việc này cho đến khi chuỗi được mã hóa đủ ngắn. Điều này rõ ràng là không thể thực hiện được.

+0

Nhưng bạn có thể làm một việc như tìm kiếm nhị phân. Gọi 'Encoding.GetByteCount()'. Nếu quá dài, hãy trừ đi một nửa sự khác biệt giữa độ dài chuỗi và thử lại. Nếu đó là phù hợp, sau đó thêm một nửa sự khác biệt, vv Mặc dù làm nó character-by-nhân vật có lẽ là "đủ nhanh", xem xét rằng điều này có lẽ sẽ không được thực hiện rất thường xuyên. –