ورود

View Full Version : سوال: سازگاری متن داخل فایل html با فارسی



ravand
سه شنبه 07 آذر 1391, 12:52 عصر
من میخوام متنی رو به فایل html وارد کنم و وقتی فایل html رو اجرا میکنم درست متن نمایش داده بشه و بهم ریخته نباشه.
امدم یه همچین کاری رو کردم بازم متن بهم ریخت:
package main;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
public class Main {
public static void main(String[] args){
try {
File fileDir = new File("sample.htm");

Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileDir), "UTF8"));
out.append("<html><head><meta http-equiv=content-type content=text/html; charset=utf-8/><title>فایل</title></head><body><p>فایل</p></body></html>").append("\r\n");
out.flush();
out.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
وقتی سورسش رو باز میکنی فارسیش مشکلی نداره و بهم ریخته نیست ولی وقتی فایل html رو اجرا میکنی بهم ریخته است. باید چیکار کرد؟
متشکرم.

AMIBCT
سه شنبه 07 آذر 1391, 14:52 عصر
فکر می‌کنم مشکل از Encoding فایل شما باشد
فایل خودتون رو به صورت یونیکد 16 یا UTF-8 ذخیره کنید

ravand
سه شنبه 07 آذر 1391, 16:19 عصر
فکر می‌کنم مشکل از Encoding فایل شما باشد
فایل خودتون رو به صورت یونیکد 16 یا UTF-8 ذخیره کنید
این کار رو کردم . مشکل اینه که وقتی با برنامه ای مثل notepad ++ این فایل رو باز میکنم. در قسمت Encoding می بینم که گزینه ی Encode in UTF-8 without BOM به ظور خودکار انتخاب شده و با اینکه بازم میام و گزینه ی Encode in UTF-8 رو انتخاب میکنم بازم وقتی کدم رو اجرا میکنم همون without BOM انتخاب میشه.
هر کاری میکنم فایده ای نداره!!!!

همایون افشاری
سه شنبه 07 آذر 1391, 19:38 عصر
خط ۱۵ : به جای UTF8 بنویسید UTF-8

ravand
سه شنبه 07 آذر 1391, 20:07 عصر
خط ۱۵ : به جای UTF8 بنویسید UTF-8

این هم که شما گفتید علت مشکل نبود. من فکر کردم شما کد های من رو تست کردید. فکر نمیکنم تست کردن این کد زیاد وقتتون رو بگیره من خودم هم در انجمن php وقتی جواب سوال کسی رو میدم قبلش کدهاش رو تست میکنم بعد به سوالش جواب میدم.
متشکرم.

ravand
سه شنبه 07 آذر 1391, 20:20 عصر
مشکلم حل شد.
مشکل اصلی این قسمت بود که به این شکل تغییرش دادم .
out.append("<html><head><meta http-equiv="+"content-type"+" content="+"text/html; charset=utf-8"+" /><title>فایل</title></head><body><p>متن فایل</p></body></html>").append("\r\n");
از همه متشکرم.

AMIBCT
چهارشنبه 08 آذر 1391, 08:58 صبح
مشکل شما که حل شد ولی یک نکته باقی ماند
برای تبدیل یک فایل به UTF-8 از گزینه‌ی Convert استفاده کنید نه Encode
کار Encode اینه که مشخص می‌کنه محتوای فایل را با یه فرمت دیگه نشون بده
و کار Convert اینه که فرمت فایل رو عوض کنه

ravand
چهارشنبه 08 آذر 1391, 09:18 صبح
ببخشید ولی من قرار نیست تغییر فرمتی بدم. فایل html من از قبل تعیین شده و قراره متن یه سری متون که حاوی کدهای html هست رو وارد این فایل html کنم . پس نیازی به تغییر فرمت نیست.
متشکرم

ravand
چهارشنبه 08 آذر 1391, 09:19 صبح
کل کدهای من اینه:
package main;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
public class Main {
public static void main(String[] args){
try {
File fileDir = new File("sample.htm");

Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileDir), "UTF-8"));
out.append("<html><head><meta http-equiv="+"content-type"+" content="+"text/html; charset=utf-8"+" />
<title>فایل</title></head><body><p>متن فایل</p></body></html>").append("\r\n");
out.flush();
out.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}

ravand
چهارشنبه 08 آذر 1391, 13:08 عصر
من یه سری مقادیر رو از حلقه ی for می گیرم و به جای اون کدهای html با استفاده از متغییر subject میدمش به دستور زیر:
out.append(subject);
این مقادیر پشت سر هم برای دستور بالا ارسال میشه که وارد فایل html بشه ولی نمیدونم چرا از این چند مقدار فقط یک مقدارش میره توی فایل html. در صورتی که اگر دستور زیر رو بنویسم همه ی مقادیر چاپ میشه ولی نمیدونم چرا همه ی مقادیر توی فایل نمیره و فقط یکیش میره:
System.out.println(subject);
اینم بگم که حلقه ی for آخر این دستوراتم بسته میشه.

همایون افشاری
پنج شنبه 09 آذر 1391, 14:55 عصر
این هم که شما گفتید علت مشکل نبود. من فکر کردم شما کد های من رو تست کردید. فکر نمیکنم تست کردن این کد زیاد وقتتون رو بگیره من خودم هم در انجمن php وقتی جواب سوال کسی رو میدم قبلش کدهاش رو تست میکنم بعد به سوالش جواب میدم.
متشکرم.
اتفاقا تست کردم. روی سیستم من (ubnutu)مشکل نداشت. البته ممنون که به توصیه ام (UTF-8) توجه کردید ;-)
سوال آخر رو هم من دقیق متوجه نشدم.

ravand
پنج شنبه 09 آذر 1391, 15:37 عصر
خیلی بده که برنامه های ما توی هر سیستم عاملی یه سازی میزنه. :لبخند:
ببینید چون دستورات من که به کد زیر داده میشه داخل حلقه ی for هست پشت سر هم نمایش داده میشه.
out.append(subject);
مثلا subject متغییری هست که مقادیری رو داره میگیره و با دستور بالا میده به فایل html . و باید این مقادیر مثلا 5 تا باشه ولی از این 5 تا مقدار یا ده مقدار فقط یک مقدار به فایل وارد میکنه در صورتی که من میخوام هر 5 تا یا ده تا مقدار رو وارد فایل html بکنه. الان اگه به جای این دستور بالا بیام دستور زیر رو بنویسم
System.out.println(subject);
توی صفحه هر ده تا مقدار رو پشت سر هم چاپ میکنه. این نشون میده که حلقه وجود داره ولی نمیدونم چرا از این ده تا مقدار فقط یکیش به فایل تزریق میشه!؟

همایون افشاری
پنج شنبه 09 آذر 1391, 18:35 عصر
فکر کنم منظورتون همچین کدیه :

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class Main {

public static void main(String[] args) {
try {
File fileDir = new File("/home/sample.htm");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileDir), "UTF-8"));
String[] strings = { "<html><head><meta http-equiv=", "content-type", " content=", "text/html;", " /><title>فایل</title></head><body><p> Homayoun : متن فایل</p></body></html>" };
for (int i = 0; i < strings.length; i++) {
out.append(strings[i]);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


این کد بدون مشکل اجرا میشه.
95771


خیلی بده که برنامه های ما توی هر سیستم عاملی یه سازی میزنه. :لبخند:

بهتره بگیم : خیلی بده که هر سیستم عاملی در مورد کد ما ساز خودشو میزنه.
البته بدتر از اون ساز زدن خود ما توی فروم هاست.

ravand
پنج شنبه 09 آذر 1391, 19:43 عصر
ببینید شما هنوز منظورم منو متوجه نشدید.
به زبان ساده بگم. ببینید من یک حلقه دارم که مثلا مقدار یک فیلد از جدول در دیتابیس رو چاپ میکنه این مقادیر که توی این فیلد هستن ده عدد هست.
ساده تر بگم من یه برنامه ی دریافت ایمیل نوشتم که ایمیل ها رو از سرویس جیمیل میکشه بیرون و پشت سر هم چاپ میکنه بعد این مقادیر داده میشه به این کدی که شما نوشتی و این کد مقادیر رو پشت سر هم میده به فایل html و الان باید همه ی این مقادیر و در واقع ایمیل ها بره توی فایل html ولی از این ده تا ایمیل فقط یکیش وارد فایل html میشه. حالا شما میتونی این مقادیر رو از سرویس ایمیل در نظر بگیری که پشت سر هم چاپ میشه یا از دیتابیس.