Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > asp.net ms word response da türkçe karakter sorunu
Yazar
halil


avatar

Kayıt: 01.01.2006
22.02.2007-16:32 #17230
Selamlar ,

konu başlığından da anlaşılacağı üzere türkçe karakterlerle başım belada , şöyleki ;

Kullanıcıya db den listeyi çekip Word dosyası halinde kullanıcıya yolluyorum ,

aynı sayfada üretilen iki dosyadan birinde türkçe karakter problemi yokken bi diğerinde karakterler bozuk çıkabiliyor , kafayı sıyırmak üzereyim :)

kod :

				OracleConnection orc = new OracleConnection(ConfigurationSettings.AppSettings["ora"].ToString());
				OracleCommand orco = new OracleCommand();
				OracleDataReader ordt ;

				HttpContext.Current.Response.Clear();
				HttpContext.Current.Response.ContentType = "application/msword";
				HttpContext.Current.Response.Charset = "windows-1254";
				
//HttpContext.Current.Response.ContentEncoding = 
//System.Text.Encoding.GetEncoding("ISO-8859-9");

HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");

// HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");

string strFileName = rid+"_Malzeme_Listesi.doc";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);

StringBuilder strHTMLContent = new StringBuilder();

strHTMLContent.Append("<table align='Center' width='600px'>".ToString());
strHTMLContent.Append("<tr><td colspan='4' align='center'>MALZEME LİSTESİ</td></tr>".ToString());

strHTMLContent.Append("<td><b>Sıra No</b></td>".ToString());
strHTMLContent.Append("<td><b>Malzeme Adı</b></td>".ToString());
strHTMLContent.Append("<td><b>Adet</b></td>".ToString());
strHTMLContent.Append("<td><b>Birim</b></td>".ToString());
strHTMLContent.Append("</tr>".ToString());

string sql = string.Format(@"Select **** "); // uzuuuun bi sql ...

orco = new OracleCommand(sql,orc);

orc.Open();

OracleParameter opi = new OracleParameter("rid",OracleType.VarChar);
opi.Value = rid;
orco.Parameters.Add(opi);

ordt = orco.ExecuteReader();

while (ordt.Read())
{

strHTMLContent.Append("<tr>".ToString());
strHTMLContent.Append("<td style='width: 100px'>"+ordt[0].ToString()+"</td>".ToString());
strHTMLContent.Append("<td style='width: 100px'>"+ordt[1].ToString()+"</td>".ToString());
strHTMLContent.Append("<td style='width: 100px'>"+ordt[2].ToString()+"</td>".ToString());
strHTMLContent.Append("<td style='width: 100px'>"+ordt[3].ToString()+"</td>".ToString());
strHTMLContent.Append("</tr>".ToString());

				}

				strHTMLContent.Append("</table>".ToString());

				HttpContext.Current.Response.Write(strHTMLContent);
				HttpContext.Current.Response.End();
				HttpContext.Current.Response.Flush();



koddan da görebileceğiniz gibi denemediğim Encoding kalmadı :) ;

bu kodda hangi encoding i seçersem , web.config e de aynısını geçiyorum ;

  <globalization 
    requestEncoding="windows-1254" 
    responseEncoding="windows-1254" 
    fileEncoding="windows-1254"
    />


sistem de xp pro sp2 yüklü ...

bi fikri olan varsa paylaşırsa , çok sevinirim ...





....
Yazar
cantur


avatar
Rize
admin
Kayıt: 16.01.2006
23.02.2007-09:33 #17276
veritabanından bilgi çekiyorsun sanırım bunlar NVARCHAR olmadığından olabilir. (MsSql server2000 de benim başıma gelmişti. Yaptığın encodinglerde hata yok gibi.)





Yazar
halil


avatar

Kayıt: 01.01.2006
23.02.2007-09:36 #17277
metin alanların tamamı oracle da varchar olarak duruyo , db den çekmediğim kısım bile bi düzgün bi bozuk gelebiliyor ;

en başta bi "MALZEME LİSTESİ" var tablonun başlığı , o bile bi düzgün bi bozuk ... :)





....
Yazar
cantur


avatar
Rize
admin
Kayıt: 16.01.2006
23.02.2007-10:09 #17279
Bende eski yazdığıma baktım.

düz txt dosyasına çıkarırken bile benzer problem yaşanabiliyor.

Bir tek gözüme çarpan culture tanımlamış olmam.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="tr-TR" uiCulture="tr-TR"/>

belki buydu.





Yazar
cantur


avatar
Rize
admin
Kayıt: 16.01.2006
23.02.2007-10:11 #17280
dosyayı yolladığım kod parçası. değişkenleri göz ardı edersen

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment;filename="+dosya_adi+uzanti+"");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("Windows-1254");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.WriteFile(dosya_yolu);
Response.End();





Yazar
halil


avatar

Kayıt: 01.01.2006
23.02.2007-11:00 #17281
yine olmadı abicim : ) , attachment ı inline yapınca da karakterler problemsiz geliyor , word de problemli ...

akla ziyan bişey farkettim , bu döktüğüm listenin uzunluğu 10-15 satıra kadar problem çıkarmıyor , karakterler düzgün , ama 50-60 satırlık bi liste dökünce karakterler bozuluyo , bu işler hep benimi bulur yarabbim :)

yardımlar için teşekkürler , son eklediğin kodun tam versiyonu varmı ?
araya satırları yazılan versiyonu ?? bişey değişmeyecek gibi duruyo da yine de deniyim ...





....
Yazar
cantur


avatar
Rize
admin
Kayıt: 16.01.2006
23.02.2007-11:46 #17286
kodun tam hali uzun ve biraz kafa karıştırabilir.
Benim yazdığımda ben önce dosyayı serverda oluşturup sonra kullanıcıya bu kod vasıtasıyla indirtiyorum.

Senin yazdığında word olarak kaydettiğin dosya içinde bir html tablo yazmayamı çalışıyorsun. (Bununda başına encoding koy laughing)

Şunu denedin mi benim koddaki : application/octet-stream

Birde internette şöle bir şeye raslamıştım.
 
[small]
#region Dosya Encoding Tesbiti
/// <summary>
/// Dosya Yolu Girilen (c:inetpubwwwroot şeklinde) Dosyanın Encodinginin ASCII mi yoksa Unicode'mu olduğunu belirler.
/// </summary>
/// <param name="DosyaYolu">Encodingi belirlenecek Dosya Yolu</param>
/// <returns></returns>
public System.Text.Encoding DosyaninEncodinginiBul(string DosyaYolu)
{
System.Text.Encoding enc = null;
System.IO.FileStream file = null;
try
{
file = new System.IO.FileStream(DosyaYolu,FileMode.Open, FileAccess.Read, FileShare.Read);
if (file.CanSeek)
{
byte[] bom = new byte[4]; // Get the byte-order mark, if there is one
file.Read(bom, 0, 4);
if ((bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) || // utf-8
(bom[0] == 0xff && bom[1] == 0xfe) || // ucs-2le, ucs-4le, and ucs-16le
(bom[0] == 0xfe && bom[1] == 0xff) || // utf-16 and ucs-2
(bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff)) // ucs-4
{
enc = System.Text.Encoding.Unicode;
}
else
{
enc = System.Text.Encoding.ASCII;
}
}
else
{
// The file cannot be randomly accessed, so you need to decide what to set the default to
// based on the data provided. If you're expecting data from a lot of older applications,
// default your encoding to Encoding.ASCII. If you're expecting data from a lot of newer
// applications, default your encoding to Encoding.Unicode. Also, since binary files are
// single byte-based, so you will want to use Encoding.ASCII, even though you'll probably
// never need to use the encoding then since the Encoding classes are really meant to get
// strings from the byte array that is the file.

enc = System.Text.Encoding.ASCII;
}
}
catch(System.Exception)
{}
finally
{
// Close the file: never forget this step!
file.Close();
}
return enc;
}
#endregion
[/small]


belki işine yarar.





Yazar
halil


avatar

Kayıt: 01.01.2006
23.02.2007-14:14 #17294
html in içine de encoding koydum düzeldi : )

3 satırdan birine encoding gerekiyomuş demekki :P

hatırlattığın için sağol :)





....
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb