มีลูกค้าที่ต้องการสร้างเว็บไซต์เวอร์ชันรัสเซีย ฉันใช้การเข้ารหัส 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 ภาษารัสเซียจึงสามารถแสดงผลได้ตามปกติ อย่างไรก็ตาม เนื่องจากค่าเริ่มต้นของภาษาจีนคือการแสดง "Song Ti" ภาษารัสเซียจึงจะแสดงเป็นอักขระเต็มความกว้างใน "Song Ti" ซึ่งน่าเกลียดจึงต้องใช้ฟอนต์ภาษาต่างประเทศ เช่น "New Rome" หรือ "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
.เปิด
.Charset = "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 ได้โดยไม่ต้องดัดแปลง และใช้กันอย่างแพร่หลาย