force o xdocument a gravar em string com codificação utf-8
<p>eu quero ser capaz de escrever xml para um string com a declaração e com codificação utf-8. isso parece muito difícil de realizar.</p><p>eu li um pouco e tentei algumas das respostas populares para isso, mas todos eles têm problemas. meu código atual gera corretamente como utf-8, mas não mantém a formatação original do xdocument (ou seja, recuos/espaços em branco)!</p><p>alguém pode oferecer algum conselho, por favor?</p><pre><code>xdocument xml = new xdocument(new xdeclaration("1.0", "utf-8", "yes"), xelementxml); memorystream ms = new memorystream(); using (xmlwriter xw = new xmltextwriter(ms, encoding.utf8)) { xml.save(xw); xw.flush(); streamreader sr = new streamreader(ms); ms.seek(0, seekorigin.begin); string xmlstring = sr.readtoend(); } </code></pre><p>o xml requer que a formatação seja idêntica à maneira como a <code>.tostring()</code> formata, ou seja,.</p><pre><code>&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?&gt; &lt;root&gt; &lt;node&gt;blah&lt;/node&gt; &lt;/root&gt; </code></pre><p>o que estou vendo atualmente é</p><pre><code>&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?&gt;&lt;root&gt;&lt;node&gt;blah&lt;/node&gt;&lt;/root&gt; </code></pre><p><strong> update </strong> consegui fazer isso funcionar adicionando configurações <code>xmltextwriter</code> ... parece muito desajeitado!</p><pre><code>memorystream ms = new memorystream(); xmlwritersettings settings = new xmlwritersettings(); settings.encoding = encoding.utf8; settings.conformancelevel = conformancelevel.document; settings.indent = true; using (xmlwriter xw = xmltextwriter.create(ms, settings)) { xml.save(xw); xw.flush(); streamreader sr = new streamreader(ms); ms.seek(0, seekorigin.begin); string blah = sr.readtoend(); } </code></pre>
<p>tente isto:</p><pre><code>using system; using system.io; using system.text; using system.xml.linq; class test { static void main() { xdocument doc = xdocument.load("test.xml", loadoptions.preservewhitespace); doc.declaration = new xdeclaration("1.0", "utf-8", null); stringwriter writer = new utf8stringwriter(); doc.save(writer, saveoptions.none); console.writeline(writer); } private class utf8stringwriter : stringwriter { public override encoding encoding { get { return encoding.utf8; } } } } </code></pre><p>claro, você não nos mostrou como está construindo o documento, o que dificulta o teste ... acabei de tentar com uma <code>xdocument</code> construída à mão e que também contém o espaço em branco relevante.</p>
<p>cria um filter e seta o encoding para utf-8, deve resolver:</p>
<pre class="prettyprint"><code>&#64;webfilter(&#34;/*&#34;)
public class characterencodingfilter implements filter {

 &#64;override
 public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws servletexception, ioexception {
 request.setcharacterencoding(&#34;utf-8&#34;);
 chain.dofilter(request, response);
 }
}</code></pre> **Editar** : ok eu acho que isso funciona (pelo menos funcionou no meu ambiente de teste, ver revisões para tentativa anterior)



```
$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('text/html; charset=UTF-8');
    },
});
$('#stuff').load('/yourresource.file'); // your ajax load

```

o que eu tinha era o principal arquivo definido no `UTF-8`eo arquivo de dados definido em `ISO-8859-1`. sem o código acima, eu tenho um monte de lixo para a cadeia teste **åäöé** , como esperado. com o código acima, carregou **åäöé** adequadamente codificada. <p>há vários aplicativos da web que validam um documento xml em relação a um esquema específico.</p><ol> <li> <a href="http://tools.decisionsoft.com/schemavalidate/">http://tools.decisionsoft.com/schemavalidate/</a> </li> <li> <a href="http://www.xmlvalidation.com/">http://www.xmlvalidation.com/</a> </li> <li> <a href="http://www.xmlme.com/validator.aspx">http://www.xmlme.com/validator.aspx</a> </li> <li> <a href="http://www.xmlforasp.net/schemavalidator.aspx">http://www.xmlforasp.net/schemavalidator.aspx</a> </li> </ol><p>eu acho que é um caso de escolher e usar a ferramenta que possui a interface que você mais gosta, pois todos fazem o mesmo trabalho.</p> <p>textfx -&gt; html tidy -&gt; tidy: reindent xml</p><p>lembre-se de ter o código html selecionado antes de fazer isso.</p> ```
header('Content-type: text/html; charset=UTF-8') ;

/**
 * Encodes HTML safely for UTF-8. Use instead of htmlentities. 
 *
 * @param string $var 
 * @return string 
 */
function html_encode($var)
{
    return htmlentities($var, ENT_QUOTES, 'UTF-8');
}

```

Esses dois me salvou e eu acho que agora está *trabalhando* . Eu vou voltar se eu continuar a encontrar problemas. Devo armazená-lo no DB, por exemplo, como "&" ou como "&"? Quando o documento é transferido através de HTTP, [as informações do cabeçalho HTTP são as informações crutial](http://www.w3.org/TR/html401/charset.html#h-5.2.2) :



> 
> [...] agentes de usuário conformes devem observar as seguintes prioridades para determinar a codificação de caracteres de um documento (da mais alta prioridade para a menor):
> 
> 
> 1. Um HTTP " `charset`" parâmetro em um " `Content-Type`campo".
> 2. Uma `META`declaração com " `http-equiv`" definido para " `Content-Type`" e um valor definido para " `charset`".
> 3. O `charset`conjunto de atributos em um elemento que designa um recurso externo.
> 
> 
> 


Portanto, verifique se você declarar a codificação de caracteres no [`Content-Type`campo de cabeçalho](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17) e não apenas dentro do documento. <p>você pode tentar colocar uma nova linha nos dados:</p><pre><code>&lt;data&gt;foo bar baz baz bar&lt;/data&gt; </code></pre><p>se isso não funcionar, talvez seja necessário analisar a string manualmente.</p><p>se você precisar de xaml direto, é fácil:</p><pre class="lang-xml prettyprint-override"><code>&lt;textblock&gt; lorem &lt;linebreak/&gt; ipsum &lt;/textblock&gt; </code></pre> <p>oi alex,</p>
<p>é um antigo padrão do struts mas não precisa ser assim, tanto que basta colocar algum outro pattern no web.xml</p>
<p>há ainda várias aplicações que seguem o esse padrão, veja por exemplo a página do airfrance:</p>
<p><a href="http://www.airfrance.com.br/cgi-bin/af/br/pt/common/home/voos/bilhete-aviao.do" rel="nofollow">http://www.airfrance.com.br/cgi-bin/af/br/pt/common/home/voos/bilhete-aviao.do</a></p>
<p>abs</p> <p>opa bruno, tudo bom?</p>
<p>tente incluir essa linha antes de utilizar o <code>printwriter</code> pra adicionar conteúdo à sua resposta:</p>
<pre class="prettyprint"><code>resp.setheader(&#34;content-type&#34;, &#34;text/html; charset&#61;utf-8&#34;);</code></pre>
<p>isso força a resposta a utilizar um encoding específico. outra alternativa seria incluir isso no corpo html da resposta:</p>
<pre class="prettyprint"><code>string body &#61; &#34;&lt;html&gt;&#34;&#43;
 &#34;&lt;head&gt;&lt;meta charset&#61;&#34;utf-8&#34;&gt;&lt;/head&gt;&#34;&#43;
 &#34;&lt;body&gt;&#34;&#43;seuconteudo&#43;&#34;&lt;/body&gt;&#34;&#43;
 &#34;&lt;/html&gt;&#34;;
writer.println(body);</code></pre>
<p>acredito que uma dessas opções vai resolver seu problema!</p>
<p>caso contrário, pode voltar aqui e vemos mais alternativas pra atacar!</p>
<p>um abraço e bons estudos!</p> <p>você pode usar find com <a href="http://en.wikipedia.org/wiki/xargs">xargs</a> para isso</p><p><code>find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -imysongs mv -i mysongs /somedir</code></p><blockquote> <p>o comando -i no comando acima informa ao xargs qual string de substituição você deseja usar (caso contrário, adiciona os argumentos ao final do comando).</p> </blockquote><p>or<br> no seu comando, tente mover '{}' após o comando <code>mv</code>.</p><p><code>find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;</code></p>