سؤال

القائمة التطبيق يمر XML إلى sproc في SQLServer 2000 ، الإدخال المعلمة نوع بيانات النص ؛ XML مشتق من مجموعة البيانات.GetXML().ولكن لاحظت أنه لا تحديد الترميز.

حتى عندما يقوم المستخدم الخونة في غير الحرف في مجموعة البيانات ، على وجه التحديد ASCII 146 (الذي يظهر أن يكون علامة اقتباس أحادية) بدلا من ASCII 39 (اقتباس مفردة) ، sproc فشل.

نهج واحد هو بادئة نتيجة GetXML مع

<?xml version="1.0" encoding="ISO-8859-1"?>

يعمل في هذه الحالة ، ولكن ما يمكن أن يكون أكثر النهج الصحيح لضمان sproc لا تحطم (إذا كانت غير متوقعة الشخصيات يطفو على السطح)?

PS.وأظن أن على المستخدم هو كتابة النص في MS-Word أو مماثلة محرر و نسخ و لصق في حقول الإدخال من التطبيق ؛ ربما تريد أن تسمح للمستخدم مواصلة العمل بهذه الطريقة ، تحتاج فقط إلى منع حوادث.

تحرير:أنا أبحث عن الإجابات التي تأكيد أو نفي بعض الجوانب على سبيل المثال:
كما في العنوان ما الترميز الافتراضي إذا لم المحددة في XML ؟
- هو الترميز ISO-8859-1 واحد الحق في استخدامها ؟
- إذا كان هناك أفضل ترميز يشمل أكثر الشخصيات في العالم الناطقة باللغة الإنجليزية وبالتالي فمن غير المرجح أن يسبب خطأ في sproc?
- هل الفلتر عند التطبيق واجهة المستخدم مستوى ASCII القياسية (0 إلى 127 فقط) ، وعدم السماح أحرف ASCII الموسعة?
- أي غيرها من التفاصيل ذات الصلة.

هل كانت مفيدة؟

المحلول

DataSet.GetXml() إرجاع أ string. وبعد في .NET، يتم ترميز السلاسل داخليا باستخدام UTF-16، ولكن هذا غير مناسب هنا.

السبب لماذا لا يوجد <?xml encoding=...> الإعلان في السلسلة هو أن هذا الإعلان مفيد فقط أو اللازم لتحليل XML في بايت بيت. وبعد سلسلة .NET ليست دفق البايت، إنه مجرد نص مع دلالات CodePoint المعرفة جيدا (وهو Unicode)، لذلك ليس هناك حاجة إلى هناك.

إذا لم يكن هناك إعلان ترميز XML، يتم افتراض UTF-8 بواسطة محلل XML في غياب BOM. ومع ذلك، في حالتك غير ذات صلة تماما لأن المشكلة ليست مع محلل XML (لا يتم تحليل XML بواسطة SQL Server عندما يتم تخزينه في TEXT عمودي). المشكلة هي أن XML الخاص بك يحتوي على بعض أحرف Unicode، و TEXT هو نوع SQL غير Unicode.

يمكنك تشفير string إلى أي ترميز باستخدام Encoding.GetBytes() طريقة.

نصائح أخرى

أعتقد النهج الخاص بك ينبغي أن يكون استخدام WriteXml بدلا من GetXml.يجب أن تسمح لك لتحديد ترميز.

لاحظ أنه سيكون لديك لكتابة خلال وسيط تيار - إذا كنت الإخراج مباشرة إلى سلسلة ، وسوف دائما استخدام UTF-16.منذ كنت تستخدم نص عمود من شأنها أن تسمح أحرف غير صالحة في النص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top