PowerShell дээр ажиллаж байгаа гуравдагч талын хэрэгслүүд болон PowerShell дээрх гаралтын кодчиллын асуудлууд (ШИЙДСЭН)


PowerShell-д анхдагчаар ямар кодчилол ашигладаг вэ. PowerShell дээрх анхдагч гаралтын кодчилолыг UTF-8 болгон хэрхэн өөрчлөх вэ

Хэрэв та PowerShell 5 дээр дараах тушаалыг ажиллуулбал:


"Testing" > test.file

Шинээр үүсгэсэн test.file доторх кодчиллыг шалгавал UTF-16LE болж байна.

Хэрэв та PowerShell 7 дээр дараах тушаалыг ажиллуулбал:


"Testing" > test.file

Шинээр үүсгэсэн test.file доторх кодчиллыг шалгавал UTF-8 болох нь харагдаж байна.

PowerShell 5 дээр гүйцэтгэсэн дараах тушаал:


.\mysqldump.exe -u root --all-databases > all-databases_ps5.sql

Бүх MySQL мэдээллийн баазыг mysqldump ашиглан экспортлох UTF-16LE кодлогдсон all-database_ps5.sql файлыг үүсгэдэг (нөөцлөх зорилгоор). Эдгээр мэдээллийн санд БҮХ латин бус тэмдэгтүүд нөхөж баршгүй гэмтэх болно!

Энэ нь кирилл үсгийн оронд иймэрхүү зүйл болно.

'╨Р╤А╨▒╨╕╤В╤А╨░╨╢╨╜╤Л╨╣ ╨┐╤А╨╛╤Ж╨╡╤Б╤Ж╨╡╤Б╤Б: ⤡╕Г: ⤡╕Г ╨╕ ╨║/╨Ъ.╨Ь. ╨Р╤А╤Б╨╗╨░╨╜╨╛╨▓, ╨Ф.╨е. ╨Т╨░╨╗╨╡╨╡╨▓, ╨а.╨Э. ╨У╨╕╨╝╨░╨╖╨

PowerShell 7 дээр гүйцэтгэсэн дараах тушаал:


.\mysqldump.exe -u root --all-databases > all-databases_ps7.sql

Бүх MySQL мэдээллийн санг mysqldump ашиглан экспортлох UTF-8 кодлогдсон all-database_ps7.sql файлыг үүсгэдэг (нөөцлөх зорилгоор). Гэвч эдгээр мэдээллийн санд БҮХ латин бус тэмдэгтүүд ДАХИН ЭРХИЙН БОЛОМЖГҮЙ гэмтэх болно!

Өөрөөр хэлбэл, анхдагч кодчилол нь UTF-8 болж өөрчлөгдсөн юм шиг санагдаж байгаа ч мэдээллийн сангийн нөөцлөлт бүрэн гэмтсэнтэй холбоотой асуудал арилаагүй байна.

PowerShell дээрх UTF-8 кодчилолд гуравдагч талын програмын гаралтыг хэрхэн хадгалах вэ

PowerShell дээрх командуудын гаралтыг гэмтээж буй дээрх үйлдэл нь хүлээн зөвшөөрөгдөхгүй. PowerShell дээрх гаралтыг UTF-8 кодчилолд хэрхэн хадгалахыг харцгаая.

PowerShell-ийн гаралтыг UTF-8 кодчилолд хэрхэн хадгалах талаар Out-File командыг ашиглана уу

Дараах тушаалыг анхаарч үзээрэй.


.\mysqldump.exe -u root --all-databases > all-databases.sql

Дээр дурдсанчлан, энэ нь буруу кодчилолоос болж латин бус тэмдэгтүүдийг гэмтээдэг.

Зарим эх сурвалжид асуудлыг шийдэхийн тулд > тэмдэгтийг Гадаад файл-аар солихыг зөвлөж байна, мөн кодчилолыг - UTF8-г кодлох” сонголт. Өөрөөр хэлбэл, дараах тушаалыг ашиглана уу.


.\mysqldump.exe -u root --all-databases | Out-File -Encoding UTF8 all-databases_fixed.sql

Үнэн хэрэгтээ, PowerShell 7 болон PowerShell 5 дээр энэ тушаал бага зэрэг өөрчлөгддөг. Нэгдүгээрт, тушаал нь гаралтын дахин чиглүүлэлтийн тэмдэг “>”-тай адил байна. Хоёрдугаарт, анхдагч байдлаар Out-File командлет нь UTF-8 кодчилолыг ашигладаг, өөрөөр хэлбэл үүнийг тусгайлан зааж өгөх шаардлагагүй.

Гэхдээ хамгийн чухал зүйл бол өгөгдөл нь UTF-8 кодчилол бүхий файлд хадгалагдаж байгаа хэдий ч (өмнөх тушаалд энэ нь all-databases_fixed.sqlфайл), латин биш юм. Энэ файлын тэмдэгтүүд гэмтсэн хэвээр байна! Хамгийн гол нь Out-Fileкомдлет нь хүлээн авсан өгөгдлийг буруу кодчилолоор боловсруулдаг. Иймээс Out-File өгөгдлийг яг хэрхэн хадгалах нь хамаагүй - энэ командлетыг хүлээн авах үед өгөгдөл аль хэдийн гэмтсэн байна.

Хүлээн авсан өгөгдлийн кодчилолыг тодорхой зааж өгснөөр асуудлыг шийдсэн.


[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8")

Тушаалын дараагийн ажил нь бүх өгөгдлийг зөв кодчилолд хадгалсан:


.\mysqldump.exe -u root --all-databases | Out-File -Encoding UTF8 all-databases_fixed.sql

Энэ арга нь PowerShell 7 болон PowerShell 5 дээр адилхан сайн ажилладаг.

Дашрамд хэлэхэд, энэ аргыг ашигласан анхны тушаал нь өгөгдлийг зөв кодчилолд хадгалдаг.


[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8")
.\mysqldump.exe -u root --all-databases > all-databases.sql

Гуравдагч талын хэрэглүүрүүдийн гаралтыг хэмнэх

Өмнөх бүх командуудад бид mysqldump хэрэгслийн гаралтыг файл эсвэл Out-File командлет руу дахин чиглүүлсэн. Гэхдээ mysqldump хэрэгсэл нь --result-file сонголттой бөгөөд үүний дараа та гаргах файлын нэрийг зааж өгч болно. Өөрөөр хэлбэл, энэ сонголтыг ашигласны үр дүнд та гаралтыг дахин чиглүүлэх эсвэл PowerShell командуудыг ашиглах шаардлагагүй болно.

Дараах тушаал нь мэдээллийн санг зөв кодчилолоор хадгалах болно.


.\mysqldump.exe -u root --all-databases --result-file=all-databases.sql