มีลูกค้าที่ต้องการสร้างเว็บไซต์เวอร์ชันรัสเซีย ฉันใช้การเข้ารหัส UTF-8 สำหรับส่วนหน้าและส่วนหลัง แต่ข้อมูลรัสเซียแบบคงที่ที่สร้างผ่านฐานข้อมูลนั้นอ่านไม่ออก หากแสดงโดยใช้ GB2312 ข้อมูลภาษารัสเซียแบบคงที่ที่สร้างผ่านฐานข้อมูลจะแสดงอย่างถูกต้อง แต่ข้อความภาษารัสเซียในไฟล์เทมเพลตจะอ่านไม่ออก ลักษณะเฉพาะมีดังนี้:
1. เข้าใจภาษารัสเซียปกติผ่านเทมเพลต
2. ข้อมูลรัสเซียแบบคงที่ที่สร้างผ่านฐานข้อมูลแบ็กเอนด์จะแสดงตามปกติในส่วนแบ็กเอนด์ แต่จะอ่านไม่ออกในส่วนหน้า
3.ภาษาอังกฤษเป็นเรื่องปกติ
สำนวนที่คล้ายกันหรือแตกต่างที่เกี่ยวข้องกับหัวข้อ
FSO เขียนไฟล์ที่เข้ารหัส UTF-8
FSO สามารถสร้างไฟล์ที่เข้ารหัส utf-8 ได้อย่างไร
รูปแบบการเข้ารหัสเริ่มต้นของไฟล์ที่สร้างโดย FSO คืออะไร
วิธีแปลงเป็นการเข้ารหัส UTF-8
ปัญหากับ FSO สร้างหน้าเว็บแบบคงที่
รหัสสำหรับการใช้ FSO เพื่อสร้างไฟล์ใน ASP มีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น createfile (sfilename, scontent)
ตั้งค่า fso=server.CreateObject (scripting.filesystemobject)
ตั้งค่า f1=fso.opentextfile(sfilename,2,true,-1)
f1.write (ไม่พอใจ)
f1.ปิด
ตั้งค่า fso=nothing
ฟังก์ชั่นสิ้นสุด
fso.opentextfile(sfilename,2,true,-1) พารามิเตอร์สุดท้าย -1 ระบุรูปแบบการเข้ารหัสเป็น Unicode เมื่อรูปแบบการเข้ารหัสเป็น Unicode หน้าเว็บจะแสดง UTF-16 little-endian
วิธีการ OpenTextFile
สร้างไฟล์ที่ระบุและส่งกลับวัตถุ TextStream ซึ่งสามารถใช้เพื่ออ่านหรือเขียนไฟล์ที่สร้างขึ้น
object.OpenTextFile(ชื่อไฟล์[, iomode[, สร้าง [, รูปแบบ]]])
จำเป็นต้องมีออบเจ็กต์พารามิเตอร์ ควรเป็นชื่อของวัตถุ FileSystemObjec หรือโฟลเดอร์ นี่คือ fso
ชื่อไฟล์ จำเป็น นิพจน์สตริงที่ระบุไฟล์ที่จะสร้าง นี่คือชื่อไฟล์
iomode พารามิเตอร์ทางเลือก ระบุว่าไฟล์ถูกใช้สำหรับการอ่าน การเขียน หรือการต่อท้าย ค่าเริ่มต้นคือ 1 สำหรับการอ่าน 2 สำหรับการเขียน และ 8 สำหรับการต่อท้าย
create พารามิเตอร์ทางเลือก ไม่ว่าจะสร้างไฟล์หากไม่มีอยู่ ค่าเริ่มต้นคือ false หากคุณต้องการสร้างไฟล์ ให้ตั้งค่าเป็นจริง
รูปแบบ พารามิเตอร์สามารถเป็นหนึ่งในการตั้งค่าต่อไปนี้ ค่าเริ่มต้นคือรูปแบบ ASCII และเราต้องการไม่มี utf-8:
TristateUseDefault -2 เปิดไฟล์ในรูปแบบเริ่มต้นของระบบ
TristateTrue -1 เปิดไฟล์ในรูปแบบ Unicode
TristateFalse 0 เปิดไฟล์ในรูปแบบ ASCII
แอตทริบิวต์การเข้ารหัสของ FSO มีเพียงสามรายการเท่านั้น ค่าเริ่มต้นของระบบคือ Unicode และ ASCII และเราต้องการไม่มี utf-8 ดังนั้น ไฟล์ที่สร้างโดยใช้ส่วนประกอบ FSO บนระบบภาษาจีนโดยทั่วไปจะอยู่ในรูปแบบการเข้ารหัส gb2312
แนวทางแก้ไขที่หนึ่ง
การเข้ารหัส GB2312 มีตัวอักษรภาษารัสเซีย หากตั้งค่าหน้าเป็นภาษาจีนตัวย่อ GB2312 ภาษารัสเซียจึงสามารถแสดงผลได้ตามปกติ อย่างไรก็ตาม เนื่องจากค่าเริ่มต้นของภาษาจีนคือการแสดงแบบอักษรเพลง ภาษารัสเซียจึงจะแสดงเป็นอักขระเต็มความกว้างในแบบอักษรเพลง ซึ่งน่าเกลียด เลยต้องใช้ฟอนต์ภาษาต่างประเทศ เช่น New Roman หรือ Arial เป็นต้น ลูกค้าชาวจีนสามารถสื่อสารที่นั่นได้ แต่เมื่อชาวรัสเซียจริงๆ ท่องเว็บ พวกเขาจำเป็นต้องดาวน์โหลดและติดตั้งภาษาจีน ซึ่งไม่เหมาะและอาจนำไปสู่การเลิกท่องเว็บได้
โซลูชันที่ 2
เนื่องจาก ASP เป็นภาษาเก่า คุณลักษณะบางอย่างจึงรองรับ UTF-8 ได้แย่มาก FSO ไม่รองรับการสร้างไฟล์ในรูปแบบ UTF-8 โดยตรง เนื่องจากไม่สามารถระบุรูปแบบไฟล์ที่ต้องการได้ ตัวอย่างเช่น หากคุณต้องการสร้างไฟล์ในรูปแบบ UTF-8 คุณจะไม่สามารถใช้ออบเจ็กต์ Scripting.FileSystemObject ที่ใช้กันทั่วไปได้ เราต้องเปลี่ยนความคิดของเราและใช้ Adodb.Stream นี่คือวิธีการใช้งานโปรแกรมบล็อกปัจจุบันบางโปรแกรม เช่น zblog
ฟังก์ชั่นของอ็อบเจ็กต์ Scripting.FileSystemObject ในการสร้างไฟล์มีดังนี้:
FileSystemObject.CreateTextFile(ชื่อไฟล์[,เขียนทับ[,ยูนิโค้ด]])
แอตทริบิวต์ Unicode มีคำอธิบายดังนี้:
ไม่จำเป็น. ค่าบูลีนที่ระบุว่าจะสร้างไฟล์ในรูปแบบไฟล์ Unicode หรือ ASCII ค่านี้เป็น True หากไฟล์ถูกสร้างขึ้นในรูปแบบไฟล์ Unicode แต่เป็นเท็จหากไฟล์ถูกสร้างขึ้นในรูปแบบไฟล์ ASCII หากละเว้นส่วนนี้ ระบบจะถือว่าไฟล์ ASCII ถูกสร้างขึ้น
ขออภัย คุณไม่สามารถใช้ฟังก์ชันนี้เพื่อสร้างไฟล์รูปแบบ UTF-8 ได้
ใช้วัตถุ ADODB.Stream ดูด้านล่างสำหรับการใช้งาน:
คัดลอกรหัสรหัสดังต่อไปนี้:
ตั้งค่า objStream = Server.CreateObject(ADODB.Stream)
ด้วย objStream
.เปิด
.ชุดอักขระ = utf-8
.Position = objStream.Size
.WriteText=str
.SaveToFile server.mappath(/sitemap.xml),2
.ปิด
จบด้วย
ตั้งค่า objStream = ไม่มีเลย
ภาคผนวก: ข้อมูลเบื้องต้นเกี่ยวกับ ASCII, Unicode และ UTF-8
ASCII คือชุดอักขระ รวมถึงตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวเลข อักขระควบคุม ฯลฯ โดยแสดงเป็นหนึ่งไบต์และมีช่วงตั้งแต่ 0-127
เนื่องจากอักขระที่แสดงโดย ASCII นั้นมีจำกัดมาก แต่ละประเทศหรือภูมิภาคจึงเสนอชุดอักขระของตนเองโดยยึดตามสิ่งนี้ ตัวอย่างเช่น GB2312 ซึ่งใช้กันอย่างแพร่หลายในประเทศจีน ให้การเข้ารหัสสำหรับอักขระภาษาจีนและแสดงด้วยสองไบต์
ชุดอักขระเหล่านี้เข้ากันไม่ได้ และตัวเลขเดียวกันอาจแทนอักขระที่แตกต่างกัน ทำให้เกิดปัญหาในการแลกเปลี่ยนข้อมูล
Unicode คือชุดอักขระที่จับคู่อักขระทั้งหมดในโลกกับหมายเลขเฉพาะ (จุดโค้ด) เช่น หมายเลข 0x0041 ที่ตรงกับตัวอักษร a Unicode ยังอยู่ในการพัฒนาและมีอักขระเพิ่มมากขึ้น
เมื่อจัดเก็บอักขระที่แสดงด้วย Unicode จำเป็นต้องใช้วิธีการเข้ารหัสบางอย่าง เช่น UCS-2 ซึ่งใช้สองไบต์เพื่อแสดงอักขระที่เข้ารหัส Unicode UTF-8 เป็นวิธีการเข้ารหัสอีกวิธีหนึ่งของชุดอักขระ Unicode ซึ่งมีความยาวผันแปรได้ สูงสุด 6 ไบต์ และอักขระที่น้อยกว่า 127 จะแสดงด้วยหนึ่งไบต์ ซึ่งให้ผลลัพธ์เหมือนกับชุดอักขระ ASCII ดังนั้นจึงมีมาก ความเข้ากันได้ดี ข้อความภาษาอังกฤษในการเข้ารหัส ASCII สามารถประมวลผลเป็นการเข้ารหัส UTF-8 ได้โดยไม่ต้องดัดแปลง และใช้กันอย่างแพร่หลาย