2011-02-03 25 views
5

Sto usando .NET e ho bisogno di troncare una stringa che può contenere caratteri multibyte in modo che non sarà su una lunghezza impostata una volta che è codificata URL . Questo sembra qualcosa che sarebbe stato costruito, ma non riesco a trovarlo.Limitare la lunghezza di una stringa con codifica URL con caratteri multibyte in .NET

Vorrei fare una sottostringa una volta che è codificata URL, ma questo potrebbe togliere parte di un carattere codificato (lo spazio diventa% 20, e se fosse alla fine potrebbe essere troncato a% 2, che non è valido), o quella parte di un carattere multibyte verrebbe troncata (π viene codificato come% CF% 80, e potrebbe essere troncato come%,% CF,% CF% 8, e tutti sono sbagliati).

+0

Stai chiedendo come troncare una stringa ad una determinata lunghezza, o stai chiedendo come farlo automaticamente? La risposta alla prima domanda è longString.Substring (0, maxLength). – Kendrick

+0

@Kendrick: Penso che la questione sia che non si sa quanto durerà una stringa nella sua forma urlencoded, fino a quando non la si urlencoda, poiché alcuni caratteri nell'originale (ovvero i caratteri multibyte) richiedono più di un byte nella versione urlencoded. – MusiGenesis

+0

@MusiGenesis: è corretto. Ho aggiornato la mia domanda per essere più specifica. – thefroatgt

risposta

1

La mia ricerca rapida su Google non ha generato nulla per questo, che è leggermente sorprendente poiché questo sembra un problema relativamente comune (almeno per coloro che non evitano URL mostruosamente lunghi).

È possibile eseguire questa operazione in modo iterativo per codificare la stringa e, se la stringa codificata è troppo lunga, tagliare un carattere dall'originale e ricodificarlo e continuare a farlo finché la stringa codificata non è sufficientemente corta. Questo ovviamente non sarebbe molto performante.

+0

Ma si potrebbe fare qualcosa come una ricerca binaria. Chiama 'Encoding.GetByteCount()'. Se è troppo lungo, sottrai metà della differenza dalla lunghezza della stringa e riprova. Se ciò si adatta, quindi aggiungere metà della differenza, ecc. Sebbene farlo personaggio per carattere è probabilmente "abbastanza veloce", considerando che questo probabilmente non sarà fatto molto spesso. –