Jul 23, 2007

การค้นตัดคำ PHP with bag of words algorithm

มาเปิดเผย อัลกอริทึม กันนะครับ
คราวนี้ เป็นแนวคิดของการตัดคำแบบไม่เอาคำเชื่อมต่างๆ นะครับ
ที่จะยกมาให้ดูต่อไปนี้ ผมเขียนให้เป็นแนวของ Function นะครับ
ใช้ภาษา PHP นะ อีกอย่างหนึ่งคือ ผมตัดมาเฉพาะหัวใจหลักของโปรแกรม
เพราะฉะนั้นอาจจะมีข้อผิดพลาด อย่างไรก็ตาม ขอโทษมา ณ ที่นี้ด้วยนะครับ
และ code ต่อไปนี้ อาจจะสับสนบ้างถ้าดูแรกๆ เอาเป็นว่า ถ้าว่างๆ ผมจะมา
comment ในแต่ละบรรทัดให้นะครับ
ว่าตรงไหน ทำอะไรยังไง

ใครมีความคิดเห็นยังไง หรือเจอ Bug ช่วยแจ้งด้วยนะครับ
จะได้นำไปปรับปรุง

ช่วงนี้ ขอแว๊บไปทำงานต่อก่อนล่ะ ครับ



function indexCountText($text,$word)
{
$num = count(explode(strtolower($word), $text)) - 1;
return $num;
}


function cutText($file,$num)
{


$descriptor = fopen ($file, "r");
$contents = fread ($descriptor, filesize ($file));
fclose ($descriptor);
$text = htmlspecialchars($contents);
$text = strtolower($text);


$notChar = array(":",",",";",":",";","?",".","0","1","2",
"3","4","5","6","7","8","9","]","[","(",")","/",
"-","&","*","$","_","'");


$az = array(" a "," b "," c "," d "," e "," f "," g "," h ",
" i "," j "," k "," l "," m "," n "," o "," p ",
" q "," r "," s "," t "," u "," v "," w "," x "," y "," z ");


$notCheck = array(" then "," i "," the "," is "," am "," are "," a ",
" what "," why "," when "," where "," who "," which "," with ",
" and "," but "," will "," be "," to "," or ", " on "," in ",
" if "," do "," of "," any "," by "," at "," for "," as ",
" its ","http","www"," that "," not "," some ",
" it ","the ","for "," was "," than "," can "," an "," all ",
" also "," yes "," you "," your "," after "," has "," have ",
" how "," into "," like "," may "," often "," other "," such ",
" so "," they "," this "," those "," use "," used "," well ",
" were "," would "," vs "," about "," eg "," ie "," ed "," ma ",
" quot "," he "," amp "," one "," two "," age "," no "," from ",
" see "," ms "," form "," rd "," eda "," low "," length ",
" large "," now "," up "," more "," very "," new "," between ",
" over "," text "," out "," take "," these "," only "," etc ",
" there "," however "," order "," same "," review "," wants ",
" while "," until "," us "," we "," id "," our "," own ",
" her "," de "," ca ","\r\n","\r","\t");


$text = str_replace($notChar,"",$text);
$text = str_replace($az," ",$text);
$text = str_replace($notCheck," ",$text);


$wordAll ="";


$text = str_replace("\n"," ",$text);
$text = str_replace("\r"," ",$text);
$text = str_replace("\r\n"," ",$text);
$text = str_replace($notChar,"",$text);
$text = str_replace($az," ",$text);
$text = str_replace($notCheck," ",$text);


$text = trim($text);
$word = explode(" ", $text);
$word = implode(" ",$word);
$word = trim($word);
$word = explode(" ", $word);
$word = implode(" ",$word);
$word = trim($word);
$word = explode(" ", $word);
$word = implode(" ",$word);
$word = trim($word);
$word = explode(" ", $word);
$word = implode(" ",$word);
$word = trim($word);
$word = explode(" ", $word);
$word = implode(" ",$word);
$word = trim($word);
$word = explode(" ", $word);
$word = implode("#",$word);
$word = trim($word);
$word = explode("#", $word);


//array_multisort($word,SORT_ASC);
$word = array_unique($word);


switch($num)
{
case 0:

$word = implode("\n",$word);
$word = explode("\n",$word);

for($i=0; $i<= count($word)-1; $i++)
{
$wordNum[$i] = indexCountText($text,$word[$i]);
}

array_multisort($wordNum,SORT_DESC,$word);

for($i=0; $i<= 9; $i++)
{
$wordAll .= $word[$i]." ".$wordNum[$i]." time(s)\n\n";
}

return $wordAll;
break;

case 1:
$word = implode(" ",$word);
return substr($word, 0, strlen($word));
break;
}// end case
}

JAVA code with Rail fence algorithm


private String RailFenceCipher(String text,int key,boolean encry)
{
String spText="";
char[][] irText;
int row = 1;
int column = 1;
int k=0;
int j=0;
int i=0;

//รับ plaintext จากผู้ใช้เก็บไว้เป็นตัวแปรอาร์เรย์
char[] iText = new char[text.length()];
iText = text.toCharArray();

try {
//เข้าเงื่อนไขนี้ ถ้าต้องการเข้ารหัส
if(encry == true)
{

spText += "Plaintext = "+text;
spText += "\nKey = "+key;

//ถ้าความยาวของจำนวนอักขระเป็นเลขคี่
if(text.length()%key != 0) //check row
{
//ให้บันทึกความยาวของแถว และ คอลัมภ์โดยคิดด้วยการหารกับคีย์ที่ได้มา
//และเพิ่มคอลัมภ์ให้มีมากขึ้นอีกหนึ่งคอลัมภ์

row = key-1;
column =(text.length()/key) ;
} else {
//ให้บันทึกความยาวของแถว และ คอลัมภ์ โดยคิดด้วยการหารกับคีย์ที่ได้มา
row = key-1;
column = (text.length()/key)-1;
}

//ประกาศจำนวนแถวและคอลัมภ์ที่จะจัดเรียงและเข้ารหัส
irText = new char [row+1][column+1];
spText += "\nrow="+(row+1)+" column="+(column+1);

//วนตามจำนวนอักษรที่รับเข้ามา
k=0;
i=0;
j=0;
while(k<=text.length()-1)
{
//ถ้าแถวเกินให้ตั้งแถวใหม่และเปลี่ยนคอลัมภ์
if(i>row)
{
i=0;
j++;
}
//ถ้าคอลัมภ์เกินให้ตั้งคอลัมภ์ไปที่คอลัมภ์แรก
if(j>column)
{
j=0;
}
//นำค่าที่ได้จากการดึงอักษรที่มีมาเก็บไว้ในรูปแบบใหม่ที่ผ่านการเรียงแบบ Rail fence
irText[i][j] = iText[k];

//เพิ่มแถวและเพิ่มตัวชี้ลำดับอักษรที่ป้อนเข้ามา
i++;
k++;
}
spText += "\n\n";

//วนข้อมูลในการอ้างถึงอาร์เรย์โดยสิ้นสุดเมื่อวนครบซึ่ง คิดจาก แถวคูณคอลัมภ์
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1 และให้มีการเว้นบรรทัดด้วย

if(j>column)
{
j=0;
i++;
spText += "\n";
}
//แสดงอักษรตามการเรียงที่ละคอลัมภ์และทำการเพิ่มค่าหลักและเพิ่มค่าตัวนับอย่างละ 1
spText += "\t"+irText[i][j];
j++;
k++;
}

//แสดง ciphertext โดยเรียงตามแถว
spText += "\n\nCiphertext = ";
for(i=0;i<=row;i++)
for(j=0;j<=column;j++)
{
spText += ""+irText[i][j];
}
}
else //จะกระทำเงื่อนไขนี้ ก็ต่อเมื่อต้องการถอดรหัส
{
spText += "Ciphertext = "+text;
spText += "\nKey = "+key;
//ถ้าความยาวของจำนวนอักขระเป็นเลขคี่
if(text.length()%key != 0) //check row
{
//ให้บันทึกความยาวของแถว และ คอลัมภ์โดยคิดด้วยการหารกับคีย์ที่ได้มา
//และเพิ่มคอลัมภ์ให้มีมากขึ้นอีกหนึ่งคอลัมภ์

row = key-1;
column =(text.length()/key) ;
} else {
//ให้บันทึกความยาวของแถว และ คอลัมภ์ โดยคิดด้วยการหารกับคีย์ที่ได้มา
row = key-1;
column = (text.length()/key)-1;
}

//ประกาศจำนวนแถวและคอลัมภ์ที่จะจัดเรียงและถอดรหัส
irText = new char [row+1][column+1];
spText += "\nrow="+(row+1)+" column="+(column+1);


//วนตามจำนวนอักษรที่รับเข้ามา
i=0;
j=0;
k=0;
while(k<=text.length()-1)
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1

if(j>column)
{
j=0;
i++;
}
//ให้ตัวแปรอาร์เรย์เก็บค่าที่ป้อนเข้ามาตามการเรียงแบบแถว
//และทำการเพิ่มค่าคอลัมภ์และตัวนับ

irText[i][j] = iText[k];
j++;
k++;
}
spText += "\n\n";

//วนข้อมูลในการอ้างถึงอาร์เรย์โดยสิ้นสุดเมื่อวนครบซึ่ง คิดจาก แถวคูณคอลัมภ์
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวทิ่กำหนดให้แถวเริ่มต้นที่ 0 ใหม่
if(i>row)
{
i=0;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ์เริ่มต้นที่ 0 ใหม่
//และให้มีการเพิ่มค่าแถวอีก 1 และให้มีการเว้นบรรทัดด้วย

if(j>column)
{
j=0;
i++;
spText += "\n";
}
//แสดงตัวอักษรเรียงตามแถวและเพิ่มตัวนับ
spText += "\t"+irText[i][j];
j++;
k++;
}

//วนแสดงอาร์เรย์ทั้งหมดเพื่อแสดง ciphertext
spText += "\n\nCiphertext = ";
i=0;
j=0;
k=0;
while(k<((row+1)*(column+1)))
{
//ถ้าแถวมากกว่าแถวที่กำหนดให้เริ่มต้นที่แถว 0 ใหม่และเพิ่มคอลัมภ์อีกหนึ่ง
if(i>row)
{
i=0;
j++;
}
//ถ้าคอลัมภ์มากกว่าคอลัมภ์ที่กำหนดให้คอลัมภ็เริ่มต้นใหม่ที 0
if(j>column)
{
j=0;
}
//แสดงตัวอักษรที่ได้จากการถอดรหัส
spText += ""+irText[i][j];
i++;
k++;
}
}//else

} catch(Exception e) {
System.out.println(e);
}

return spText;
}


JAVA code with Columnar Transposition

สำหรับ code ของแนวคิดนี้ ค่อนข้างจะยาว
และผมยังหาวิธี แสดงลงที่ Blog นี้ไม่ได้
ไว้จะส่งลิงค์ มาให้ โหลด ไปศึกษา นะครับ


JAVA code with Monoalphabetic algorithm


private String Monoalphabetic(String text,int key,boolean encry) {
String spText="";
int index = 0;

//กำหนดค่าให้กับตัวแปรเพื่อเป็น plaintext ทั้งหมดที่อนุญาติให้เข้ารหัสและถอดรหัส
char[] pText = new char[180] ;
try{
//A=>z 94
for (int i=32; i<=126; i++) {
pText[i-32] = (char)i;
}
//ก=>ฮ 58
for (int i=160; i<=218; i++) {
pText[i-160+94] = (char)i;
}
//0=>9 28
for (int i=223; i<=251; i++) {
pText[i-223+94+58] = (char)i;
}
}catch(Exception e){System.out.println(e);}

//กำหนดค่าสูงสุดของจำนวน plaintext ที่มีทั้งหมด
int maxChar = pText.length-1 ;

//รับตัวเลขลำดับอ้างถึง plaintext ทั้งหมด เก็บไว้ในตัวแปร
int[] xText = new int [pText.length];
for(int i=0; i<(maxChar+1); i++) {
xText[i] = i;
}

//กำหนดค่า
int[] cText = new int [xText.length]; //algorithm have value key
int[] ixText = new int [text.length()]; //number code text of iText
char[] iText = new char[text.length()]; //char of text

//เก็บข้อความ plaintext ที่ได้จากผู้ใช้ ไว้ยังตัวแปร
try{
text = new String(text.getBytes("TIS-620"),"ISO8859_1");
} catch(java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
iText = text.toCharArray();

//ทำการเข้ารหัสแบบ Monoalphabetic ร่วมกับ key ที่ป้อน
//และเก็บไว้เป็นชุดของ plaintext ทั้งหมดที่ผ่านการเข้ารหัสแล้ว
//ซึ่งเป็นการนำตัวเลขลำดับ ที่ผ่านการบวกกับคีย์ นำมาหารตัดเศษ

for(int i=0; i<=maxChar; i++) {
              cText[i] = (xText[i]+key)%(maxChar+1);
}

//ถ้าเข้ารหัส จะเข้าเงื่อนไขนี้
if(encry == true) {

spText += "Plaintext = "+text+"\n";
spText += "key = "+key+"\n\n";

//เรียงอักษรที่เป็น plaintext ทั้งหมดแสดงบนหน้าจอ
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
spText += "\n";

//เรียงตัวเลขชี้ลำดับของ plaintext ทั้งหมดแสดงบนหน้าจอ
for(int i=0; i<=maxChar; i++) {
spText += xText[i]+" ";
}
//แสดงตัวเลขประจำของอักษรที่ป้อนเข้ามา
spText += "\n\nPlaintext code = ";
for(int j=0; jfor(int i=0; i<=maxChar; i++) {
//ถ้าตัวอักษร plaintext ที่มีตรงกับอักษรที่ป้อนเข้ามา
//จะเก็บลำดับของตัวชี้ แสดงบนหน้าจอ

if(pText[i] == iText[j]) {
spText += xText[i]+" ";
}
}

spText += "\nEncryption Algorithm :: e_k(x) = x + K mod "+(maxChar+1)+"\n\n";

//วนเรียงตัวอักษรที่เป็น plaintext ที่มีทั้งหมด
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
spText += "\n";

//วนเรียงตัวชี้ลำดับตัวอักษร ที่ผ่านการหารตัดเศษเรียบร้อยแล้ว
for(int i=0; i<=maxChar; i++) {
spText += cText[i]+" ";
}
//กระบวณการอิงอักษร plaintext ที่ป้อนมากับที่มีทั้งหมด
spText += "\nCiphertext = ";
for(int j=0; j<=iText.length-1; j++)
for(int i=0; i<=maxChar; i++) {
//ถ้าที่ plaintext ที่ป้อนเข้ามากับ plaintext ที่กำหนดไว้ตรงกันก็จะแสดงการเข้ารหัส
//โดยที่อ้างถึง plaintext ตามตัวชี้ที่มีค่าที่ได้จากการนำตัวเลขลำดับ บวกกับคีย์ และหารตัดเศษ

if(pText[i] == iText[j]) {
spText += pText[cText[i]];
}
}

} else //จะกระทำเงื่อนไขนี้ ก็ต่อเมื่อต้องการถอดรหัส
{
spText += "Ciphertext = "+text+"\n";
spText += "key = "+key+"\n\n";

//เรียงอักษรที่เป็น plaintext ทั้งหมดแสดงบนหน้าจอ
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
spText += "\n";

//เรียงตัวเลขชี้ลำดับของ plaintext ทั้งหมดแสดงบนหน้าจอ
for(int i=0; i<=maxChar; i++) {
spText += xText[i]+" ";
}
//แสดงตัวเลขลำดับสำหรับอ้างถึงอักษร Ciphertext
spText += "\n\nCiphertext code = ";
for(int j=0; j<=iText.length-1; j++)
for(int i=0; i<=maxChar; i++) {
//ถ้าตัวอักษร plaintext ที่มีนั้น ตรงกับที่ป้อนเข้ามาแล้ว
//ให้เก็บค่าตัวเลขแสดงลำดับไว้ยังตัวแปร และแสดงออกทางหน้าจอ

if(pText[i] == iText[j]) {
ixText[j] = xText[i];
spText += ixText[j]+" ";
}
}
spText += "\n\n";

//วนแสดงอักษร plaintext ที่มีทั้งหมด
for(int i=0; i<=maxChar; i++) {
spText += pText[i]+" ";
}
spText += "\n";

//วนแสดงตัวแปรที่เก็บ ค่าที่ได้จากการนำตัวเลขลำดับ บวกกับคีย์ และหารตัดเศษ
for(int i=0; i<=maxChar; i++) {
spText += cText[i]+" ";
}
//วนแสดง plaintext
spText += "\n\nPlaintext = ";
for(int j=0; j<=iText.length-1; j++)
for(int i=0; i<=maxChar; i++) {
//ถ้าค่าตัวเลขของ plaintext ที่ป้อนเข้ามา ตรงกับ
//ค่าที่ได้จากการนำตัวเลขลำดับ บวกกับคีย์ และหารตัดเศษ
//ก็ให้แสดงตัวอักษร plaintext ที่อ้างถึงโดยตำแหน่ง ที่เท่ากันกับ ตำแหน่งของ
//ตัวแปรที่เก็บค่าที่ได้จากการนำตัวเลขลำดับ บวกกับคีย์ และหารตัดเศษ

if(ixText[j] == cText[i]) {
spText += pText[i];
}
}

}//encry == false

try{
spText = new String(spText.getBytes("ISO8859_1"),"TIS-620");
} catch(java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}

return spText;
}


JAVA code with Shift cipher algorithm

วันนี้ผมมี แนวคิดการเข้ารหัสและถอดรหัสมาฝากนะครับ
เป็นโปรแกรมที่ผมพัฒนาขึ้นมาเองนะครับ สำหรับภาษาที่ใช้ก็คือ ภาษาจาวานะครับ
เป็น Java windows application เครื่องมือที่ใช้ในการพัฒนาคือ
NetBeans IDE 5.5.1 นะครับ

งานนี้เริ่มต้นขึ้นได้เพราะเป็นการบ้านที่ต้องทำส่งในรายวิชา Computer Security
ที่ผมกำลังเรียนอยู่ อาจารย์ก็เลยให้โจทย์ และให้งานมาทำนะครับ
ผมคิดว่าจะทยอยเอา ส่วนที่เป็นหัวใจหลักของโปรแกรมมาแสดงไว้ที่นี่นะครับ
ว่าลักษณะการเขียนโปรแกรมของผมนั้น ถูกต้อง ดีแล้วหรือยัง

อย่างไรก็ตาม ขอบคุณสำหรับเพื่อนๆ ทุกคนที่ช่วยอธิบายแนวคิดให้ผม
จนสามารถนำมาเปิดเผย เพื่อให้บุคคลที่สนใจได้ศึกษาต่อไปด้วย
ซึ่งสำหรับผู้สนใจท่านใดยังไม่เข้าใจในแนวคิดหรือกระบวณการทำงานของโปรแกรม
สามารถแสดงความคิดเห็นมาได้ทันทีนะครับ
สำหรับ Code ที่เป็นแบบ Visual Basic .Net
ลองดูได้ที่เว็บพี่เดช นะครับ




private String shiftCipher(String text,int key,boolean encry) {

String spText="";

int index = 0;

int num = 0;



//กำหนดค่าให้กับตัวแปรเพื่อเป็น plaintext ทั้งหมดที่อนุญาติให้เข้ารหัสและถอดรหัส

char[] pText = new char[180] ;

try{

//A=>z 94

for (int i=32; i<=126; i++) {

pText[i-32] = (char)i;

}

//ก=>ฮ 58

for (int i=160; i<=218; i++) {

pText[i-160+94] = (char)i;

}

//0=>9 28

for (int i=223; i<=251; i++) {

pText[i-223+94+58] = (char)i;

}

}catch(Exception e){System.out.println(e);}



//รับข้อความ plaintext ที่ได้จากผู้ใช้โปรแกรมเก็บไว้ในตัวแปร

char[] iText = new char[text.length()];

try{

text = new String(text.getBytes("TIS-620"),"ISO8859_1");

} catch(java.io.UnsupportedEncodingException e) {

e.printStackTrace();

}

iText = text.toCharArray();



//กำหนดจำนวนที่มีของ plaintext

int maxChar = pText.length-1 ;



//วนเก็บค่าไปยังชุดข้อมูลใหม่โดยให้มีการ shift เกิดขึ้นตาม key ที่รับมา

//โดยที่ถ้าตัวลำดับที่อ้างถึงน้อยกว่าหรือเท่ากับจำนวนทั้งหมดของ plaintext ให้เข้าเงื่อนไขนี้


num = 0;

char[] xText = new char[pText.length];

while(num <= maxChar) {

//ให้ตัวชี้มีค่าตาม Key

index = num+key;



//ถ้าวนจนตัวชี้เกินค่ามากที่สุดของชุดข้อมูลให้ทำการ

//นำค่าที่มีลบออกด้วยค่าที่มากที่สุดของชุดข้อมูล

//ดังนั้นก็จะสามารถนำข้อมูลเข้ากล่องข้อมูลกล่องแรกได้ และถัดต่อไปเรื่อยๆ


if(index > maxChar) {

index = index - pText.length;

}

//เก็บค่าข้อมูลที่มีการ Shift แล้ว

xText[num] = pText[index];

num++;

}



//ถ้าผู้ใช้ต้องการเข้ารหัสจะเข้าเงื่อนไขนี้

if(encry == true) {



spText += "Plaintext = "+text+"\n";

spText += "key = "+key+"\n\n";



//แสดง plaintext ทั้งหมดที่หน้าจอ

num = 0;

for(int i=0; i<=maxChar; i++) {

spText += pText[i]+" ";

}

spText += "\n";



//แสดง plaintext ที่ผ่านการ shift ตาม key

for(int i=0; i<= maxChar; i++) {

spText += xText[i]+" ";

}



spText += "\n";

spText += "\nEncryption Algorithm :: C_i = E(P_i) = P_i + key";



//แสดงการเข้ารหัส

spText += "\nCiphertext = ";

for(int j=0; j<iText.length; j++)

for(int i=0; i<=maxChar; i++) {

//ถ้าวนมาเจออักษร plaintext ที่กำหนดไว้ในโปรแกรมและ

//ตรงกับอักษรที่รับเข้าไปก็ให้นำอักษรที่มีลำดับตรงกันแสดงทางหน้าจอ

//โดยที่อักษรดังกล่าวนั้นได้ผ่านการ shift ไว้แล้ว


if(pText[i] == iText[j]) {

spText += xText[i];

}

}

} else //ถ้าผู้ใช้ต้องการถอดรหัส จะเข้าเงื่อนไขนี้

{

spText += "Ciphertext = "+text+"\n";

spText += "key = "+key+"\n\n";



//แสดงอักษรที่มีการ shift แสดงที่หน้าจอ

for(int i=0; i<=maxChar; i++) {

spText += xText[i]+" ";

}

spText += "\n";



//แสดงอักษรที่ไม่มีการ shift ซึ่งเป็น plaintext ทั้งหมด

for(int i=0; i<=maxChar; i++) {

spText += pText[i]+" ";

}



//แสดงอักษร plaintext ที่มาจากการรับค่าและผ่านการถอดรหัส

spText += "\n\nPlaintext = ";

for(int j=0; j<iText.length; j++)

for(int i=0; i<=maxChar; i++) {

//ถ้าค่าที่รับเข้ามาตรงกับค่าที่ถูก shift แล้ว

//ให้แสดงตัวอักษร plaintext ที่ยังไม่ผ่านการ shift


if(iText[j] == xText[i]) {

spText += pText[i];

}

}

}



try{

spText = new String(spText.getBytes("ISO8859_1"),"TIS-620");

} catch(java.io.UnsupportedEncodingException e) {

e.printStackTrace();

}



return spText;

}



Blog Comment

บทความที่ได้รับความนิยม