riguardo a rawurlencode credo sia stato adeguato da php 5.4.0
spiegazione header:
quando un cliente, in questo caso "browser", richiede una url http, invia gli header, che specificano cosa supporta questo cliente, un es. minimale sarebbe, il mine type e charset.
Il sever web, che comunemente, abbina il mime type alle estensioni dei file. In caso di file html(o che non riconosce), il mime type, sarà text/html come default, ma senza charset.. purtroppo, http 1.1 dice: che se non si è specificato il charset, come default sarà utilizzato iso-8859-1 (questo discorso vale solo per pagine statiche).
In pagine dinamiche, ad es php, per http specifica il charset per merito del default_charset() impostato .(cioè qualunque charset).
spiegazione breve: in php con output html, senza header sarà inviato come impostato da default_charset.
Tanti la specificano con iso-8859-1.
insomma i caratteri che ti attendi da windows, non saranno rispettati.